Microsoft cung cấp chức năng InterlockedCompareExchange
để thực hiện các phép so sánh và hoán đổi nguyên tử. Ngoài ra còn có một số _InterlockedCompareExchange
nội tại.cho các lệnh x86 nguyên tử
Trên x86, chúng được thực hiện bằng cách sử dụng lệnh cmpxchg
.
Tuy nhiên, đọc qua tài liệu về ba cách tiếp cận này, chúng dường như không đồng ý về các yêu cầu căn chỉnh.
của reference manual Intel nói gì về sự liên kết (khác so với kiểm tra nếu liên kết được kích hoạt và một tham chiếu bộ nhớ unaligned được thực hiện, một ngoại lệ được tạo ra)
Tôi cũng nhìn lên lock
tiền tố, trong đó đặc biệt khẳng định rằng
Tính toàn vẹn của tiền tố LOCK là không bị ảnh hưởng bởi sự liên kết của trường bộ nhớ.
(tôi nhấn mạnh)
Vì vậy, Intel dường như nói thẳng đó là không thích hợp. Các hoạt động sẽ là nguyên tử không có vấn đề gì.
Các tài liệu nội tại _InterlockedCompareExchange
cũng không nói gì về sự liên kết, tuy nhiên InterlockedCompareExchange
chức năng khẳng định rằng
Các thông số cho chức năng này phải được xếp trên một ranh giới 32-bit; nếu không, hàm sẽ hoạt động không thể đoán trước trên các hệ thống x86 đa xử lý và bất kỳ hệ thống không phải x86 nào.
Vì vậy, điều gì mang lại? Yêu cầu căn chỉnh cho InterlockedCompareExchange
chỉ để đảm bảo chức năng sẽ hoạt động ngay cả trên CPU trước 486, nơi lệnh cmpxchg
không khả dụng? Điều đó dường như có khả năng dựa trên thông tin trên, nhưng tôi muốn chắc chắn trước khi tôi dựa vào nó. :)
Hoặc căn chỉnh theo yêu cầu của ISA để đảm bảo tính nguyên tử và tôi chỉ đang tìm những địa điểm sai trong sách hướng dẫn tham khảo của Intel?
Văn bản tôi trích dẫn ở trên IS từ sách hướng dẫn của Intel và nó nêu rõ các yêu cầu căn chỉnh khác nhau cho mỗi gia đình bộ vi xử lý. Có lẽ tôi đã sử dụng các từ ngữ khác nhau để thể hiện rằng thông tin Intel CẬP NHẬT rất rõ ràng, tôi đoán rằng những gì bạn nhận được để đọc một .pdf từ năm 1999. – damageboy
-1: Bạn đã nhận được phần sai từ sổ tay phải. Các hoạt động bộ nhớ cơ bản và các hoạt động nguyên tử bị khóa là những thứ khác nhau. –
@damageboy -1: Khi MackieMesser nói đúng, báo giá của bạn nói về * hoạt động bộ nhớ cơ bản * và không * hoạt động nguyên tử *, tức là hoạt động được đặt trước bằng 'LOCK', đó là những gì OP hỏi, như' LOCK' được sử dụng trong trường hợp hoạt động x86 nguyên tử. –