[英]Will fetch_add with relaxed memory order return unique values?
想象一下N個線程運行遵循簡單的代碼:
int res = num.fetch_add(1, std::memory_order_relaxed);
其中num
是:
std::atomic<int> num = 0;
是否完全可以安全地假設,運行代碼的每個線程的res
將是不同的,或者對於某些線程可能是相同的?
是。 所有線程都會同意各種線程修改變量num
的順序; 執行該行代碼的第k個線程肯定會獲得值k。 但是,使用std::memory_order_relaxed
意味着對num
訪問不會彼此同步; 因此,例如,一個線程可以在修改num
之前修改一些其他原子變量x
,而另一個線程可以看到前一個線程對num
進行的修改但隨后看到x
的舊值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.