什么以及如何发生 - 在c ++ 0x之前发生

时间:2013-01-18 19:00:07

标签: c++ multithreading

你能解释一下在两个线程之间共享的原子的“发生前”排序吗?考虑线程“读”和线程“写”,两者共享一个原子布尔变量x。读线程只读取x的值,而写线程只是将值写入x。鉴于调度程序可以按任何顺序运行这些线程,c ++如何确保两个线程之间顺序一致的排序?

1 个答案:

答案 0 :(得分:2)

规则是,如果一个线程写入一个原子变量而另一个线程读取该变量并且看到写入的值,则表示您具有先发生关系。这反过来意味着在写入原子变量之前在第一个线程中写入的值在读取原子变量并看到写入的值之后对第二个线程可见。

要使用原子变量进行同步,您必须执行以下操作:

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