簡體   English   中英

具有寬松內存順序的fetch_add會返回唯一值嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM