可能重複:
Concurrency: Atomic and volatile in C++11 memory model什麼C++ 11 <atomic>操作/內存命令保證新鮮?
隨着C++ 11 <atomic>
說明書中,是有新鮮的任何保證?不同內存訂單的描述只涉及重新訂購(據我所見)。
具體來說,在這種情況下:
#include <atomic>
std::atomic<int> cancel_work(0);
// Thread 1 is executing this function
void thread1_func() {
...
while (cancel_work.load(<some memory order>) == 0) {
...do work...
}
}
// Thread 2 executes this function
void thread2_func() {
...
cancel_work.store(1, <some memory order>);
...
}
如果線程1和線程2不共享除了cancel_work
任何其他數據,似乎對我來說,不需要任何排序保證和std::memory_order_relax
足夠兩個商店和負載。但是,這是否保證線程1將永遠看到cancel_work
的更新,而不是隻重複讀取其本地緩存行,而不必從主內存刷新它?如果不是,那麼做出這種擔保的最低要求是什麼?
@UmNyobe之前我沒有找到這個問題的原因是,它似乎是關於揮發物。答案是重複的,但問題在於,不是因爲人們會找到與你提到的「原子和易變」問題不同的東西。 – JanKanis