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

有 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博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值