[英]Wrong std::condition_variable example on cppreference?
在std::condition_variable
的示例用法中,它们基本上具有
std::mutex m;
std::condition_variable cv;
bool ready = false;
void worker_thread()
{
// Wait until main() sends data
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return ready;});
// more ...
}
int main()
{
std::thread worker(worker_thread);
data = "Example data";
// send data to the worker thread
{
std::lock_guard<std::mutex> lk(m);
ready = true;
}
cv.notify_one();
// more...
}
我现在的问题是变量ready
,它没有被声明为std::atomic*
。
如果发生虚假唤醒,为什么不引入竞争条件?
不,没有竞争条件。
即使条件变量虚假唤醒,它也必须重新获得锁定。 因此,有两件事情发生:
ready
,因为锁可以保护它。 ready
具有最新值。 因此,竞争条件无法发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.