C ++ 11原子操作:并发化atomic_fetch_sub_explicit操作

时间:2017-08-02 04:33:39

标签: c++11 atomicity

我对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);
}

0 个答案:

没有答案