假设n个线程运行以下简单代码:
int res = num.fetch_add(1, std::memory_order_relaxed);
哪里 num 是:
num
std::atomic<int> num = 0;
完全可以假定 res 对于运行代码的每个线程,代码将是不同的,或者对于某些线程,代码可能是相同的?
res
对。所有线程都将同意各个线程修改变量的顺序。 num ;执行该行代码的第kth线程肯定会获得值k。使用 std::memory_order_relaxed 但是,这意味着访问 号码 不要相互同步;例如,一个线程可能会修改其他原子变量 x 在它修改之前 号码 ,另一个线程可能会看到对 号码 由前一个线程生成,但随后看到 X .
std::memory_order_relaxed
号码
x
X