我对c ++ 11中的'atomic_fetch_sub_explicit'操作有疑问。我已经运行了下一个代码数千次,并且只观察到两个可能的输出:“data:0 1”或“data:1 0”。我想知道是否可以生成输出:“数据:1 1 ”?
#include <atomic>
#include <thread>
using namespace std;
std::atomic<int> x;
int data1, data2;
void a() {
data1 = atomic_fetch_sub_explicit(&x, 1, memory_order_relaxed);
}
void b() {
data2 = atomic_fetch_sub_explicit(&x, 1, memory_order_relaxed);
}
int main() {
x = 1;
std::thread t1(a);
std::thread t2(b);
t1.join(), t2.join();
printf("data: %d %d\n", data1, data2);
}