Trong tiêu chuẩn C++ 11, mục 1.10/5 đề cập, nhưng không chính thức xác định các điều khoản acquire operation
, release operation
và consume operation
. Sau đó nó tiếp tục trong Phần 29 để sử dụng các thuật ngữ này để mô tả các hành động của các thứ tự bộ nhớ nhất định, các hoạt động nguyên tử và các hàng rào bộ nhớ. Ví dụ, 29,3/1 vào "Đặt hàng và nhất quán" khẳng định:Chuẩn C++ 11 có định nghĩa chính xác các hoạt động có được, giải phóng và tiêu thụ không?
memory_order_release, memory_order_acq_rel và memory_order_seq_cst: một hoạt động cửa hàng thực hiện một hoạt động phát hành [nhấn mạnh thêm] trên bộ nhớ bị ảnh hưởng vị trí.
Đây là loại ngôn ngữ được lặp đi lặp lại trong suốt phần 29, nhưng nó làm tôi bực mình một chút rằng tất cả ý nghĩa cho memory_order
enumerations được dựa trên các loại hoạt động mà bản thân chúng dường như không được chính thức theo tiêu chuẩn, nhưng phải có một số thường được thỏa thuận để có hiệu quả như định nghĩa.
Đặt một cách khác, nếu tôi nói: "Một thanh là một foo lật", ý nghĩa cụ thể của thanh và foo là mơ hồ vì không hạn được chính thức xác định. Chỉ tính chất tương đối của chúng được xác định.
Chuẩn C++ 11 hay một số tài liệu ủy ban tiêu chuẩn C++ 11 chính thức xác định chính xác một số acquire operation
, release operation
, v.v ... hoặc là những thuật ngữ này thường được hiểu? Nếu sau này, có một tài liệu tham khảo tốt được coi là một tiêu chuẩn công nghiệp cho ý nghĩa của các hoạt động này? Tôi đặc biệt yêu cầu vì các mô hình bộ nhớ phần cứng không được tạo ra bằng nhau, và vì vậy tôi phải có một số tham chiếu được đồng ý chung để cho phép những người thực hiện các trình biên dịch, vv để dịch đúng ngữ nghĩa của các hoạt động này sang các lệnh lắp ráp gốc.
Tôi đồng ý với OP. Liệu tiêu chuẩn có được giải mã một cách hợp lý hay không là một câu hỏi, nhưng ở bất kỳ mức nào, tiêu chuẩn này gây nhầm lẫn bất thường về điểm đặc biệt này. – thb
[bài viết trên blog của Jeff Preshing về phát hành/Có được] (http://preshing.com/20120913/acquire-and-release-semantics/) định nghĩa chúng về trật tự cần thiết đối với với trước/tải sau/cửa hàng, trong một cách tương thích với ngữ nghĩa C++ 11. Tôi đã không nhận ra rằng C++ 11 đã không chính thức định nghĩa chúng theo cách như thế này. –