thể trùng lặp:
Concurrency: Atomic and volatile in C++11 memory modelĐiều gì C++ 11 <atomic> hoạt động/đơn đặt hàng bộ nhớ đảm bảo độ tươi?
Với đặc điểm kỹ thuật 11 <atomic>
C++, là có bất kỳ đảm bảo độ tươi? Các mô tả của các đơn đặt hàng bộ nhớ khác nhau chỉ đối phó với việc sắp xếp lại (theo như tôi đã thấy).
Cụ thể, trong tình huống này:
#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>);
...
}
Nếu thread 1 và đề 2 không chia sẻ bất kỳ dữ liệu nào khác ngoài cancel_work
, có vẻ như với tôi rằng bất kỳ sự bảo đảm trật tự không cần thiết và std::memory_order_relax
cũng đủ cho cả các cửa hàng và tải. Nhưng điều này đảm bảo rằng thread 1 sẽ không bao giờ nhìn thấy bản cập nhật của cancel_work
thay vì chỉ liên tục đọc dòng bộ nhớ cache cục bộ của nó mà không bao giờ làm mới nó từ bộ nhớ chính? Nếu không, mức tối thiểu cần thiết để thực hiện bảo lãnh đó là gì?
@UmNyobe Lý do tôi không tìm thấy câu hỏi đó trước khi hỏi tôi là nó dường như là về các chất dễ bay hơi. Câu trả lời là một bản sao, nhưng câu hỏi là imo không phải là điều này sẽ được tìm thấy bởi những người tìm kiếm một cái gì đó khác với câu hỏi "nguyên tử và dễ bay hơi" bạn đề cập đến. – JanKanis