簡體   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