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

03-02
1034

09-02
455
