memory_order_relax只保证原子性而不保证可见性?



给定下面的C代码:

static atomic_int a_i;
static void f() 
{
for (int i = 0; i < 100; ++i)
atomic_fetch_add_explicit(&a_i, 1, memory_order_relaxed);
}

和两个线程并发调用f().

是否a_i可能最终导致硬件平台具有宽松的缓存一致性协议(与x86不同)的非200?换句话说,该操作是原子性的,但不能保证一个线程的写操作对另一个线程立即公开可见。

结果值保证为200。

内存顺序参数只决定哪些其他修改对其他线程可见。memory_order_relaxed表示不作任何保证。但是变量本身仍然是自动更新的。

最新更新