【发布时间】:2019-12-30 13:10:29
【问题描述】:
让x 和y 是std::atomic<int> 类型的两个不同变量,并假设它们的当前值都是1。什么是最宽松的一组订购要求,因此以下代码会生成一些输出? (即,order1 ... order4 应该使用什么?)
// Thread 1
x.store(0, order1); // A
if(0 == y.load(order2)) // B
std::cout << '1'; // C
// Thread 2
y.store(0, order3); // E
if(0 == x.load(order4)) // F
std::cout << '2'; // G
【问题讨论】:
-
不清楚。您的代码中没有 x 和 y。 w 是什么? s 是什么?
-
some output- 有输出吗?这意味着您希望执行点C或G之一或同时执行点C和G? -
-
我不认为有任何订购要求的组合可以保证程序输出任何东西。
-
我认为顺序一致的排序应该保证
some output。另外relaxed或acquire_rel或acquire_consume不能保证some output。
标签: c++ multithreading atomic relaxed-atomics