比方說,我們有這樣的一段代碼,這是正確的(我希望至少):組合原子和非原子變量和緩存
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;
,這是正確的?或者是否存在緩存刷新/失效問題?
如果您必須要求...使用順序一致性。除非經過嚴格的評論和封裝,即使你明白你在做什麼,維護你的代碼的人也不會。 –
這不是真的用於特定的用例。對於理論來說,這比理解更多;)。 但是,此代碼是否可以與順序一致性工作? –
對我來說看起來很好。我會鼓勵你觀看這個叫做「原子武器」的演講。這一切對我來說都是有意義的。 https://www.youtube.com/watch?v=c1gO9aB9nbs –