簡體   English   中英

混合原子和非原子變量以及緩存

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

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