[英]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.