[英]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_relaxed
的store()
和簡單分配之間的唯一區別是保證原子性。
話雖如此,當談到平台的特殊性時,我們經常可以觀察到,即使是 integer 的簡單分配也是原子的(即它不會先更改幾個字節,然后再更改其他幾個字節,其方式是例如,另一個線程可以看到)。
但是 C++ 標准並不能保證這一點,並且另一個特定的硬件可能會決定為此采取不同的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.