我正在構建一個程序,其中一個變量只被一個線程(原子,兩個方向上的完全內存屏障)修改,並讀取多個線程。讀線程是否需要以原子方式讀取變量或者簡單的讀取就足夠了?一位作家,無鎖應用程序中的多個閱讀器
通常(我用gcc,但我想這個概念是語言獨立的)
在寫線程:
__atomic_add_fetch (&a, 1, __ATOMIC_SEQ_CST);
在閱讀線程:
int b = __atomic_load_n (&a, __ATOMIC_SEQ_CST);
/* OR */
int b = a;
我猜測是,如果唯一的作家在兩個方向上都設置了完全的屏障,那麼應該沒有競爭條件,但我可以似乎沒有發現任何確認...
謝謝!
一個簡單的讀取就是UB的數據競賽。 – usr 2014-12-05 13:01:14
UB代表什麼? – MindTailor 2014-12-05 16:05:23
這是未定義的行爲。 – usr 2014-12-05 16:08:35