智能指针在多线程情况下的问题

这两天在测试一个程序的时候发现,一旦压力达到一定程度,程序立即就会崩溃,报的错误几乎都在new的时候没有内存了,一开始以为确实是因为内存分配的问题,后来在程序运行过程中用top观察,发现内存使用很低,因此可以确认不应该是瞬间内存使用完造成的。因此认真看了一下core dump的地方,发现几乎都是在自己写的一个智能指针分配内存那里出的问题。于是仔细思考了一下,发现是因为智能指针的引用计数没有加锁导致的。


一开始以为我所使用的智能指针即使是在异步情况下使用的,但是基本上只能同一时间在一个线程持有,但是事实情况却并非如此


如下代码


void func()

{

shared_ptr a;

async_call(a);

}


首先有一个智能指针,接下来,这个智能指针被丢给了异步程序,因此这个时候其实已经有两个线程同时持有这个智能指针了,因为这个函数还未退出,当前线程还拥有临时变量a。一般低压情况下,这两句很快就执行完了,不会出问题,但是高压情况下,这个函数先执行完,还是异步程序先执行完就不一定了(或者说是因为高压情况样本变多了)


结论:多线程异步程序的冲突问题比一般性多线程程序更隐蔽,很难查找,要仔细思考。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值