通知线程是否可以在被通知线程的等待锁定之前锁定?

时间:2018-11-13 14:50:16

标签: c++ multithreading operator-precedence

来自std::condition_variable::notify_one的示例代码。

我的问题是
自<{1}以来,通知线程是否有可能锁定,所以在通知线程的 wait函数锁定之前}操作不会阻止当前线程吗?


代码:(我删除了原始评论)

notify

1 个答案:

答案 0 :(得分:1)

回答标题问题,是的。 signals线程可能在waits线程之前锁定。但是回答您的真实问题,不会,这不会造成僵局。

为什么?

在示例中,由于互斥锁由lk.unlock()释放。解锁时,waits线程将有机会锁定(然后在等待开始时再次解锁)。

此循环持续进行,直到wait线程表明已使用done布尔值完成。

时间示例:

enter image description here

还有很多其他变量,但是在所有情况下,相关对象和条件变量均受互斥量保护。您不能有数据争用或死锁。这个例子是声音。