muduo中ThreadPool测试中的bug

在对muduo中线程池代码进行测试的过程中遇到了一个马虎大意的Bug,这次Bug找了挺长时间的,Bug发生在判断任务队列是否为空的一次断言当中,也就是断言失败了:
isFull在这里插入图片描述
使用printf大法查看具体情况发现,holder_有时还会为0?????
再往上溯源,继续printf大法:
在这里插入图片描述结果发现,调用wait前后holder_出现了不一致,猜测wait()的原因,
在这里插入图片描述wait()中,mutex_.unassignHolder()和mutex_.assignHolder()是后来加上的,问题就出在这里。这两行的作用就是释放mutex和重新获取mutex时重新对holder_赋值。
而muduo源码中,直接使用了UnassignGuard类来维护holder_,这个类使用方法和MutexLockGuard一样。
在这里插入图片描述
最后,断言成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值