Kể từ khi nâng cấp môi trường phát triển và xây dựng của chúng tôi từ VS2008 lên VS2012, tôi bối rối về ý nghĩa của việc sử dụng từ khóa volatile
trong codebase cũ của chúng tôi. mẫu được sao chép để quản lý chuỗi từ ngày "cũ").Thực tiễn tốt nhất để sử dụng từ khóa 'dễ bay hơi' trong VS2012
Microsoft có những nhận xét sau đây trong tài liệu VS2012:
Nếu bạn đã quen thuộc với C# dễ bay hơi từ khóa, hoặc quen thuộc với hành vi của dễ bay hơi trong các phiên bản trước của Visual C++, được nhận thức rằng từ khóa C++ 11 ISO Standard dễ bay hơi là khác nhau và được hỗ trợ trong Visual Studio khi tùy chọn biên dịch
/volatile:iso
được chỉ định. (Đối với ARM, nó được chỉ định theo mặc định). dễ bay hơi từ khóa trong C++ 11 Mã ISO chuẩn chỉ được sử dụng để truy cập phần cứng; không sử dụng nó cho giao tiếp giữa các luồng. Đối với liên lạc liên ren, hãy sử dụng các cơ chế nhưstd::atomic<T>
từ Thư viện mẫu chuẩn C++.
Nó tiếp tục nói:
Khi tùy chọn
/volatile:ms
trình biên dịch được sử dụng theo mặc định khi kiến trúc khác so với ARM được nhắm mục tiêu-trình biên dịch tạo thêm mã để duy trì trật tự trong tài liệu tham khảo cho các đối tượng dễ bay hơi trong ngoài việc duy trì thứ tự tham chiếu đến các đối tượng toàn cầu khác.
Tôi thực hiện điều này có nghĩa là mã hiện tại của chúng tôi sẽ không bị hỏng nhưng không nhất thiết phải di động (không phải là vấn đề đối với chúng tôi).
Tuy nhiên, nó làm tăng những câu hỏi này, mà tôi muốn một số lời khuyên, nếu có thể:
- Chúng ta có nên loại bỏ sử dụng của
volatile
vòng loại trong mã của chúng tôi của chúng tôi và thay thế bằng C++ 11 ISO tiêu chuẩn phù hợp tương đương, mặc dù chúng tôi sẽ không chuyển mã khỏi MS? - Nếu chúng ta không làm như trên, có bất kỳ nhược điểm nào không?
Tôi đánh giá cao đây không phải là vấn đề lập trình cụ thể nhưng chúng tôi đang bắt tay vào một số phép tái cấu trúc khá lớn và tôi muốn cung cấp một số nguyên tắc hợp lý cho công việc này.
Vui lòng sửa lỗi. Nếu không, một số đồng nghiệp của bạn sẽ, sau này trong cuộc sống của họ, trở thành đồng nghiệp của tôi và tôi không muốn phải dạy họ rằng "dễ bay hơi! = Thread-safe mặc dù bạn đã làm nó trong nhiều năm". – screwnut
Tôi sẽ làm hết sức mình - nhưng "sau này trong cuộc đời" hầu hết các đồng nghiệp của tôi sẽ được nghỉ hưu, cùng với tôi ;-) –