标签: c++ multithreading operator-precedence
来自std::condition_variable::notify_one的示例代码。
我的问题是: 自<{1}以来,通知线程是否有可能锁定,所以在通知线程的 wait函数锁定之前}操作不会阻止当前线程吗?
wait
代码:(我删除了原始评论)
notify
答案 0 :(得分:1)
回答标题问题,是的。 signals线程可能在waits线程之前锁定。但是回答您的真实问题,不会,这不会造成僵局。
signals
waits
为什么?
在示例中,由于互斥锁由lk.unlock()释放。解锁时,waits线程将有机会锁定(然后在等待开始时再次解锁)。
lk.unlock()
此循环持续进行,直到wait线程表明已使用done布尔值完成。
done
时间示例:
还有很多其他变量,但是在所有情况下,相关对象和条件变量均受互斥量保护。您不能有数据争用或死锁。这个例子是声音。