Có trình biên dịch C hoặc C++ nào ở đó thực hiện mô hình nhất quán "tích cực" cho biến số volatile
không? Theo mô hình nhất quán "tích cực", tôi đồng nghĩa với việc viết tất cả các biến cho các biến số volatile
với các rào cản bộ nhớ trong mã được tạo.Trình biên dịch C và C++ với ngữ nghĩa dễ bay hơi "tích cực"
AFAIK, đây là hành vi thông thường đối với trình biên dịch C hoặc C++ trên nền tảng IA64 (Itanium). Điều gì về x86? Có một trình biên dịch ra có thực hiện (hoặc có thể được cấu hình để thực hiện) Cách tiếp cận giống như Itanium để xử lý các biến số volatile
trên nền tảng x86?
Edit: Tôi nhìn vào mã VS 2005 tạo ra (sau khi đọc các ý kiến) và tôi không thấy bất cứ điều gì mà sẽ giống như bất kỳ loại hàng rào bộ nhớ khi truy cập vào volatile
biến. Điều này là hoàn toàn tốt đẹp để đảm bảo tính nhất quán của bộ nhớ trên một nền tảng đa lõi x86 một CPU, vì các giao thức bộ nhớ cache MESIF (Intel) và MOESI (AMD).
Tuy nhiên, điều này dường như không đủ trên nền tảng SMP x86 đa CPU. Một nền tảng SMP sẽ yêu cầu các rào cản bộ nhớ trong mã được tạo ra để đảm bảo tính nhất quán của bộ nhớ giữa các CPU. Tôi đang thiếu gì? Chính xác những gì Microsoft có ý nghĩa khi họ tuyên bố rằng họ đã có ngữ nghĩa phát hành có được trên các biến số volatile
?
[Theo Raymond Chen] (https://blogs.msdn.com/b/oldnewthing/archive/2011/04/19/10155452.aspx?Redirected=true) bạn nhận được hành vi này với VS2005 và mới hơn – Praetorian
@ Người viết: [Theo tài liệu chính thức] (http://msdn.microsoft.com/en-us/library/12a04hfd.aspx). ; -] – ildjarn
@AndreyT: Bạn có đang thử nghiệm VC++ 2005 hoặc VC++ 2005 SP1 không? IIRC, VC++ 2005 RTM có lỗi trong đó 'volatile' không có ngữ nghĩa dự kiến, đã được sửa trong SP1 và VC++ 2008+. – ildjarn