Trên kiến trúc x86, các cửa hàng đến cùng một vị trí bộ nhớ có tổng số thứ tự, ví dụ: xem this video. Các bảo đảm trong mô hình bộ nhớ C++ 11 là gì?Hai thư giãn sẽ được ghi vào cùng một vị trí trong các luồng khác nhau luôn luôn được xem theo cùng thứ tự bởi các luồng khác?
Chính xác hơn, trong
-- Initially --
std::atomic<int> x{0};
-- Thread 1 --
x.store(1, std::memory_order_release);
-- Thread 2 --
x.store(2, std::memory_order_release);
-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);
int r2 = x.load(std::memory_order_acquire);
-- Thread 4 --
int r3 = x.load(std::memory_order_acquire);
int r4 = x.load(std::memory_order_acquire);
sẽ kết quả r1==1, r2==2, r3==2, r4==1
được phép (trên một số kiến trúc khác so với x86)? Nếu tôi thay thế tất cả memory_order
bằng cách std::memory_order_relaxed
thì sao?
Bạn có thể giúp tôi hiểu p18 không? Từ đồng nghĩa 'tính toán giá trị' có từ đồng nghĩa với tải nguyên tử và' tác dụng phụ' có lưu trữ thành nguyên tử không? –
@ TobiasBrüll Tải là một tính toán giá trị; cửa hàng là một tác dụng phụ. –
Loại tính toán giá trị nào khác tồn tại? Và loại tác dụng phụ nào khác? –