cppreference上错误的std :: condition_variable示例?

时间:2017-11-08 20:17:44

标签: c++ multithreading c++11 race-condition

{% load profile_extras %} {% if user|ownPro:pk %} .... allow to edit {% else %} <p>you are not allowed </p> {% endif %} 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*未声明为'#= kendo.toString(kendo.parseDate(RequestedDate,'M/dd/yyyy h:mm tt'))#'

如果发生虚假唤醒,为什么不引入竞争条件?

1 个答案:

答案 0 :(得分:5)

不,没有竞争条件 即使条件变量虚假唤醒,它也必须重新获得锁定。因此,有两件事情发生了:

  1. 锁定时,没有线程可以触摸ready,因为锁可以保护它。
  2. 通过重新获取锁,必须同步布尔值,因为锁执行内存顺序获取,这会导致ready具有最新值。
  3. 所以竞争条件无法发生。