最近工作中发现了一个 Bug,就是有一个 condition variable 在临界区内调用了notify_one
,让另一个在cv.wait
的线程唤醒了一下然后立马又被 blocked 了。虽然不影响逻辑,但是会带来额外的线程切换负担。
公司的大神说: You shouldn't notify_one()
while holding the mutex.
虽然问题解决了(通过lock.unlock(); cv.notify_one(); lock.lock();
),但是这引起了我好奇,cv.wait
是如何告诉调度器本线程不应该被调度的?又是怎样在得到信号后唤醒线程的?
请高人帮忙解答一下吧,谢谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.