你能解释一下在两个线程之间共享的原子上的“发生在之前”的顺序吗?考虑线程“读取”和线程“写入”,它们共享一个原子 bool 变量 x。读线程简单地读取 x 的值,而写线程简单地将值写入 x。鉴于调度程序可以以任何顺序运行这些线程,c++ 如何确保两个线程之间的顺序一致?
最佳答案
规则是,如果一个线程写入原子变量而另一个线程读取该变量 并且 看到写入的值,则您有一个发生之前的关系。这反过来意味着在写入原子变量之前写入第一个线程中的值在第二个线程读取原子变量并看到写入的值之后对第二个线程可见。
要使用原子变量进行同步,您必须执行以下操作:
int i = 0;
atomic<bool> ready;
// thread 1:
i = 3;
ready = true;
// thread 2:
while (!ready)
; /* busy wait */
std::cout << i << '\n'; // writes "3" to cout
关于c++ - 在 c++0x 中发生了什么以及如何发生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14405753/