感谢Scott Meyers博士的书籍,第263页,我最近发现了
condition_variable
,所以我不得不搜索关于它的内容以更好地研究它。
https://en.cppreference.com/w/cpp/thread/condition_variable
我有几个与之相关的问题,因为我已经思考了好几天,但仍然不理解。
我的问题是关于这段代码的:
// Manual unlocking is done before notifying, to avoid waking up
// the waiting thread only to block again (see notify_one for details)
lk.unlock();
cv.notify_one();
1)我不明白cppreference的作者在评论中所说的“等待线程,只会再次阻塞”是什么意思,因为我甚至不知道如何翻译它。
2)它确切表示哪些线程,以及为什么特别表示它们。
3)它表示thread_worker还是主线程(父线程)?
4)他们选择这样做的原因是什么?
如果作者先发出通知,然后手动解锁,这会有什么变化?
notify_one
来唤醒主线程。问题是如果互斥锁不可用,主线程可能会受到影响。 - Pete Beckernotify..l
的情况下释放线程。这就是虚假唤醒,这就是为什么代码通常运行循环的原因:while (!condition) condition_variable.wait();
。 - Pete Becker