std::condition_variable 等待谓词是线程安全的吗?

Twi*_*ard 4 c++ condition-variable

采取这个代码:

std::condition_variable var;
var.wait(lock, [&sharedBool] { return sharedBool; });
Run Code Online (Sandbox Code Playgroud)

var从sharedBool读取时,线程安全吗?如果不是,那么这样做sharedBool合理std::atomic<bool>吗?

Com*_*sMS 5

读取sharedBool发生在由 锁定的互斥体的保护下lock

只要在sharedBool持有同一个互斥锁的情况下发生所有并发访问,您的程序就是线程安全的。

由于您也无法在wait持有锁的情况下使用条件变量,因此在此用例中使用原子通常是不合理的。