【发布时间】:2016-11-04 00:11:55
【问题描述】:
我在http://en.cppreference.com/w/cpp/thread/condition_variable 上阅读有关 std::condition_variable 的信息,但我不明白:
即使共享变量是原子的,也必须在 mutex 以便正确地将修改发布到等待 线程。
如果没有在互斥锁下修改共享原子变量,为什么不能正确发布?如何理解这句话?
在另一页http://en.cppreference.com/w/cpp/atomic/atomic 上有一个声明似乎与第一个声明相矛盾:
如果一个线程写入一个原子对象,而另一个线程读取 从中,行为是明确定义的(有关详细信息,请参阅内存模型 数据竞赛)
【问题讨论】:
-
std::condition_variable和std::atomic是两个不同的东西。 -
我想这是因为等待线程通过互斥锁同步(否则它不能“等待”)而不是通过原子变量。
-
关于stackoverflow.com/a/32978267/2756719的最后一个例子
-
好吧,如果
std::condition_variable有任何其他内部状态,则需要保护(同步)。