Tôi đến từ phần lớn nền C++, nhưng tôi nghĩ rằng câu hỏi này áp dụng cho luồng trong bất kỳ ngôn ngữ nào. Đây là kịch bản:Làm thế nào để hệ thống luồng đối phó với dữ liệu được chia sẻ đang được lưu trữ bởi cpus khác nhau?
Chúng tôi có hai chủ đề (ThreadA và ThreadB), và một giá trị x trong bộ nhớ chia sẻ
Giả sử rằng quyền truy cập vào x được kiểm soát một cách thích hợp bởi một mutex (hoặc kiểm soát đồng bộ thích hợp khác)
Nếu chủ đề xảy ra để chạy trên các bộ vi xử lý khác nhau, điều gì sẽ xảy ra nếu ThreadA thực hiện thao tác ghi, nhưng bộ xử lý của nó đặt kết quả trong bộ đệm L2 thay vì bộ nhớ chính? Sau đó, nếu ThreadB cố gắng đọc giá trị, nó sẽ không chỉ nhìn vào bộ đệm chính L1/L2/bộ nhớ chính của nó và sau đó làm việc với bất kỳ giá trị cũ nào đã có?
Nếu không phải vậy, thì vấn đề này được quản lý như thế nào?
Nếu đúng như vậy, thì bạn có thể làm gì để khắc phục sự cố?
Cảm ơn bạn rất nhiều vì phản hồi này. Tôi đã tự hỏi liệu một số loại cơ chế cấp phần cứng có phải được đưa vào chơi ở đây không, bởi vì dường như có những giới hạn thực tế về những gì có thể đạt được ở cấp độ ngôn ngữ/trình biên dịch. – csj