memory_order_relaxed 只保证原子性,不保证可见性?

memory_order_relaxed only guarantees atomicity and not visibility?

给定以下 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 表示不作任何保证。但是变量本身仍然是自动更新的。