Tôi đang cố gắng cải thiện sự hiểu biết của mình về các rào cản bộ nhớ. Giả sử chúng ta có một mô hình bộ nhớ yếu và chúng ta thích ứng với Dekker's algorithm. Có thể làm cho nó hoạt động chính xác theo mô hình bộ nhớ yếu bằng cách thêm các rào cản bộ nhớ?Các rào cản bộ nhớ và các hoạt động liên khóa
Tôi nghĩ câu trả lời là không đáng ngạc nhiên. Lý do (nếu tôi đúng) là mặc dù một rào cản bộ nhớ có thể được sử dụng để đảm bảo rằng một đọc không được di chuyển qua khác, nó không thể đảm bảo rằng một đọc không nhìn thấy dữ liệu cũ (chẳng hạn như trong bộ đệm). Vì vậy, nó có thể thấy một số thời gian trong quá khứ khi phần quan trọng đã được mở khóa (theo bộ nhớ cache của CPU) nhưng tại thời điểm hiện tại các bộ vi xử lý khác có thể nhìn thấy nó như bị khóa. Nếu sự hiểu biết của tôi là chính xác, người ta phải sử dụng các hoạt động liên khóa như những người thường gọi là kiểm tra và đặt hoặc so sánh và trao đổi để đảm bảo thỏa thuận đồng bộ của một giá trị tại một vị trí bộ nhớ giữa nhiều bộ xử lý.
Vì vậy, chúng ta có thể mong đợi rằng không có hệ thống mô hình bộ nhớ yếu sẽ chỉ cung cấp các rào cản bộ nhớ? Hệ thống phải cung cấp các hoạt động như kiểm tra và thiết lập hoặc so sánh và trao đổi để có ích.
Tôi nhận thấy rằng các bộ vi xử lý phổ biến, bao gồm x86, cung cấp các mô hình bộ nhớ mạnh hơn nhiều so với mô hình bộ nhớ yếu. Hãy tập trung thảo luận về các mô hình bộ nhớ yếu.
(Nếu thuật toán Dekker là một sự lựa chọn tốt, chọn một thuật toán loại trừ lẫn nhau nơi rào cản bộ nhớ thành công có thể đạt được đồng bộ chính xác, nếu có thể.)
AFAICT, đối với Dekker, nó không đủ để biết rằng lá cờ đã được rõ ràng một thời gian trong quá khứ nhưng thay vì nó là an toàn để nhập phần quan trọng ngay bây giờ. Có vẻ như tôi cần giá trị cập nhật và tôi không thấy cách bạn nhận được điều đó với các rào cản bộ nhớ (như bạn nói đúng trong câu đầu tiên của mình). –
Bạn chỉ cần một rào cản mạnh mẽ hơn là tôi chỉ cho thấy --- một "hàng rào đầy đủ". Tôi sẽ cập nhật câu trả lời của tôi để hiển thị Dekker với những rào cản sau này. –