7

想象一下 N 个线程按照简单的代码运行:

int res = num.fetch_add(1, std::memory_order_relaxed);

哪里num是:

std::atomic<int> num = 0;

是否可以完全安全地假设,res对于每个运行代码的线程来说,代码会有所不同,或者对于某些线程来说可能是相同的?

4

1 回答 1

9

是的。所有线程将就各个线程修改变量的顺序达成一致num;执行该行代码的第 k 个线程肯定会获得值 k。但是,使用std::memory_order_relaxed意味着访问num不会彼此同步;因此,例如,一个线程可能会在修改x之前修改某个其他原子变量num,而另一个线程可能会看到num前一个线程所做的修改,但随后会看到 的旧值x

于 2019-02-11T21:32:23.040 回答