[英]mix atomic and non atomic variables and caches
假設我們有一段正確的代碼(至少希望如此):
std::atomic<int> a;
std::atomic<bool> ready{false};
void threadA() {
a.store(666, std::memory_order_relaxed);
ready.store(true, std::memory_order_release);
}
void threadB() {
while(!ready.load(std::memory_order_acquire));
process(a.load(std::memory_order_relaxed));
}
我的問題是:如果您使用的是int a;
代替std::atomic<int> a;
,對嗎? 還是存在緩存刷新/失效問題?
例如,這是否一個好主意,您的代碼就可以了。
可以更換的原子類型的a
與常規int
(或任何類型為此事)。
C ++標准使用以下短語(第1.10.1-6節)來支持您的情況:
某些庫調用與另一個線程執行的其他庫調用同步。 例如,原子存儲發行版與從其存儲中獲取其值的負載獲取同步
由於threadB
加載的值ready
由存儲threadA
(它是在一個循環中等待它),則進行同步-與關系成立。 因此, a.load()
觀察的記憶效應a.store()
另一種說法是a.store()
發生在 a.load()
之前
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.