将 fetch_add 与 relaxed memory order return 唯一值?

Will fetch_add with relaxed memory order return unique values?

假设 N 个线程 运行 遵循简单的代码:

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

其中 num 是:

std::atomic<int> num = 0;

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

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

的值