c++ std::shared_ptr的线程安全问题(race condition)

news2024/11/18 13:50:19

有 3 个 shared_ptr 对象 x、g、n; 两个工作线程:

void main(){

shared_ptr g(new Foo); // 线程之间共享的 shared_ptr
shared_ptr x; // 线程 A 的局部变量
shared_ptr n(new Foo); // 线程 B 的局部变量

std::thread([&]{

 x = g; 

}).detach();

std::thread([&]{

 g = n;

}).detach();

getchar();

}

假如shared_ptr是线程安全的或者忽略shared_ptr线程安全问题,预期的结果为同一线程执行结果(这是错的):

shared_ptr g(new Foo);//heap1
shared_ptr x;
shared_ptr n(new Foo);//heap2
x = g;
g = n;
//此时x指向heap1引用计数为1,g、n执行heap2引用计数为2
return;

分析主例子多线程:

 race condition下,引用计数混乱,错误未知,造成wild pointer/memory leak/crash。

参考:c++ std::shared_ptr(内存布局)_vczxh的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式 - 消息队列Kafka:Kafka 消费者的消费位移

文章目录 01. Kafka 分区位移02. Kafka 消费位移03. kafka 消费位移的作用04. Kafka 消费位移的提交05. kafka 消费位移的存储位置06. Kafka 消费位移与消费者提交的位移07. kafka 消费位移的提交时机08. Kafka 维护消费状态跟踪的方法 01. Kafka 分区位移 对于Kafka中的分区而…

每日一题——移动零

移动零 题目链接 思路——双指针 如果可以开辟额外的空间,那这题十分好做。我们开辟和nums同样大小的空间,将遍历数组,将非零元素从头放置,将零从后往前放置,这样就可以将所有的零放到后面,同时保证非零元…

安全狗获批成为算网融合产业及标准推进委员会伙伴单位

近日,安全狗获批成为中国通信标准化协会算网融合产业及标准推进委员会伙伴单位。 据悉,中国通信标准化协会算网融合产业及标准推进委员会,致力于算网融合、数字化转型、SDN/NFV、SD-WAN、新基建、信息安全、边缘计算、高性能计算领域及典型应…

品牌营销|所有产品都值得用 AI 再做一遍

微软 CEO Satya Nadella 曾经说过:“所有的产品都值得用 AI 重做一遍。” AI 大模型的出现,开启了一个全新的智能化时代,重新定义了人机交互。这让生成式 AI 技术变得「触手可得」,也让各行业看到 AGI 驱动商业增长的更大可能性。…

基于注册中心如何实现全链路灰度

1. 为什么需要服务发现? 2. 微服务注册中心 3. 基于注册中心如何实现全链路灰度 4. GRPC 如何结合注册中心 GRPC服务发现与全链路灰度 为什么需要服务发现? 服务拆分 配置调用 如果有很多服务怎么办? 服务注册 服务发现 注册中心的架构 配置与使用 常见的…

西瓜书之神经网络

一,神经元模型 所谓神经网络, 目前用得最广泛的一个定义是“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应”。 M-P神经元 M-P神经元:接收n个输入(…

存算分离实践:构建轻量、云中立的大数据平台

今天我们将分享社区用户多点 DMALL 的案例。多点 DMALL 是亚洲领先的全渠道数字零售解决方案服务商,目前已与 380 家零售企业达成合作,覆盖 6 个国家和地区。 面对 B 端客户日益增长的企业数据,存算一体的架构显得力不从心。计算资源冗余浪费…

CAS问题汇总

CAS的执行流程? CAS比较比替换的大致流程是这样的: 首先它有三个参数 : V 内存值 A 预期的旧值 B 新值比较V的值与A的值是否相等如果相等的话,则将V的值替换成B,否则就提示修改失败。 一般正常情况的话就是没有其他线程修改内存…

解决内网GitLab 社区版 15.11.13项目拉取失败

问题描述 GitLab 社区版 发布不久,搭建在内网拉取项目报错,可能提示 unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxxGit clone error - Invalid argument error:14077438:SSL routines:SSL23_GET_S 15.11.13ht…

工业互联网产业联盟发布《2023可信工业数据流通应用案例集》

导读 随着新一代信息技术与制造业的深度融合发展,全球工业数据应用已经进入纵深发展的新阶段,数据作为新型生产要素和重要战略资源,正在制造业数字化转型过程中发挥出更大的作用。在这一进程中,工业数据的流通共享受到广泛关注。…

深入探索JavaEE单体架构、微服务架构与云原生架构

课程链接: 链接: https://pan.baidu.com/s/1xSI1ofwYXfqOchfwszCZnA?pwd4s99 提取码: 4s99 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍: 🔍【00】模块零:开营直播&a…

LeetCode集

目录 1、算法1.1 排序1.1.1 冒泡排序1.1.1.1 简单交换排序1.1.1.2 冒泡排序 1.1.2 简单选择排序1.1.3 直接插入排序1.1.4 希尔排序1.1.5 堆排序1.1.6 归并排序1.1.7 快速排序 1.1 位运算/二进制1.1.1 Java中的正数、负数1.1.2 Java中的位运算1.1.3 比特位计数1.1.4 2的幂1.1.5 …

【腾讯云Cloud Studio实战训练营】Cloud Studio + iPad,让代码之舞飞扬在指尖

Cloud Studio iPad,让代码之舞飞扬在指尖 妙手偶得,开启神奇之旅立即反馈,一切尽在掌握版本控制,简单易用MetaWork 协作,摸鱼变得不再轻松 ​一直以来,开发者大多都习惯在电脑端开发,而iPad只是…

Swift 基础

工程目录 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 点击下载代码:swift-01

windows 删除桌面右键菜单多余项

Step1:打开注册表 winr输入 regedit Step2:输入以下路径,跳转到相应位置 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell 即可查看当前所有的右键选项,如下图所示 Step3:删除不需要的选项 直接删掉相应的文…

javaScript:数组检测

目录 一.前言 二.数组检测方法 1.every() 2.some() 3.filter() 一.前言 数组检测是指在编程中对数组进行验证和检查的过程。数组检测可以涉及以下方面: 确定数组的存在:在使用数…

NLP中的RNN、Seq2Seq与attention注意力机制

目录 NLP自然语言处理 的RNN、Seq2Seq与attention注意力机制 RNN循环神经网络 前馈网络入门 前馈网络 循环网络 多层感知器架构示例 循环神经网络的运作原理 展开 RNN seq2seq模型 Attention(注意力机制) 总结 引用 NLP自然语言处理 的RNN、…

Vite更新依赖缓存失败,强制更新依赖缓存

使用vitets开发一段时间了,感觉并不是想象中的好用,特别是出现些稀奇古怪的问题不好解决,比如下面这个问题 上午9:50:08 [vite] error while updating dependencies: Error: ENOENT: no such file or directory, open E:/workspace-dir/node…

2023年备受欢迎的5款团队任务管理工具

任务管理是团队协作的重要环节,选择合适的团队任务管理软件可以提高工作效率、明确责任分工、加强沟通协作。在互联网领域,有许多好用的团队任务管理软件可供选择。下面介绍5款比较知名的团队任务管理软件,并从互联网场景的相关背景内容上进行…

懵了,面试官问我Redis怎么测,直接凉了...

前言 有些朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么? redis是一个key-value类型的高速存储数据库。 redis常被用做:缓存、队列、发布订阅等。 所以,“redis要怎么测…