簡體   English   中英

store(x, std::memory_order_relaxed) 和直接賦值的區別

[英]difference between store(x, std::memory_order_relaxed) and directly assigning a value

對於下面的代碼,只有寫操作,沒有讀-修改-寫,用std::memory_order_relaxed store和直接賦值有什么區別?

std::atomic<int> x;
int y;

x.store(123, std::memory_order_relaxed)
y = 123

據我所知,memory 排序僅在多個load() / store()操作的上下文中相關。
當只顯示store()操作時,很難給出關於之前/之后可以看到的差異的准確答案。

根據https://en.cppreference.com/w/cpp/atomic/memory_order
memory_order_relaxed“其他讀取或寫入沒有同步或排序約束,只有此操作的原子性得到保證”

因此,帶有std::memory_order_relaxedstore()和簡單分配之間的唯一區別是保證原子性

話雖如此,當談到平台的特殊性時,我們經常可以觀察到,即使是 integer 的簡單分配也是原子的(即它不會先更改幾個字節,然后再更改其他幾個字節,其方式是例如,另一個線程可以看到)。
但是 C++ 標准並不能保證這一點,並且另一個特定的硬件可能會決定為此采取不同的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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