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