繁体   English   中英

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最终可能会导致非200结果导致硬件平台具有宽松的缓存一致性协议(与 x86 不同)? 换句话说,操作是原子的,但不能保证一个线程的写入会立即对另一个线程公开可见?

结果值保证为 200。

memory 顺序参数仅涉及哪些其他修改对其他线程可见。 memory_order_relaxed表示不做任何保证。 但是变量本身仍然是原子更新的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM