3

您能否解释一下在两个线程之间共享的原子上的“发生前”排序?考虑线程“Read”和线程“write”,它们都共享一个原子布尔变量 x。读线程简单地读取 x 的值,而写线程简单地将值写入 x。鉴于调度程序可以以任何顺序运行这些线程,c++ 如何确保两个线程之间的顺序一致?

4

1 回答 1

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
于 2013-01-18T19:05:23.313 回答