Để đọc đơn giản, phần lớn là về căn chỉnh. Cách dễ nhất để đảm bảo đọc nguyên tử là luôn sử dụng căn chỉnh "tự nhiên" - nghĩa là căn chỉnh ít nhất bằng kích thước của mục (ví dụ: mục 32 bit được căn chỉnh 32 bit).
Lần đọc không được nhất quán không nhất thiết phải là nguyên tử. Đối với một ví dụ cực đoan, hãy xem xét đọc một giá trị 32 bit tại một địa chỉ lẻ nơi byte đầu tiên nằm trong một dòng bộ nhớ cache và ba byte còn lại nằm trong một dòng bộ nhớ cache khác. Trong trường hợp này, đọc nguyên tử cơ bản là không thể.
Vì (ít nhất là hầu hết) bộ vi xử lý sử dụng bus bộ nhớ rộng 64 bit, mục lớn nhất có thể hy vọng được đọc nguyên tử là 64 bit.
Nguồn
2010-07-28 04:39:49
Tôi nghĩ bạn nói đúng. Điều đó có ý nghĩa. Cảm ơn. – IamIC
Đừng quên chấp nhận câu trả lời nếu nó giúp bạn;) –
Không phải lúc nào! Nếu địa chỉ bộ nhớ nằm trong bộ nhớ cache sử dụng CPU thứ hai trong đơn vị CPU nhiều thì đọc không được đảm bảo là nguyên tử. Vì vậy, sử dụng "LOCK CMPXCHG EAX, [var]" bộ nhớ cache hàng rào đầu tiên. –