2012-03-19 27 views
6

sự khác biệt giữa InterlockedCompareExchangeRelease()InterlockedCompareExchangeAcquire() là gì?sự khác biệt giữa InterlockedCompareExchange phát hành (là gì) và Acquire()?

Khi tôi cố gắng tìm hiểu những chức năng đồng bộ hóa với Win32 API, tôi thấy có hai chức năng đặt tên khác nhau nhưng dường như làm điều tương tự:

LONG __cdecl InterlockedCompareExchangeRelease(
    __inout LONG volatile *Destination, 
    __in  LONG Exchange, 
    __in  LONG Comparand 
); 

LONG __cdecl InterlockedCompareExchangeAcquire(
    __inout LONG volatile *Destination, 
    __in  LONG Exchange, 
    __in  LONG Comparand 
); 

tôi kiểm tra MSDN, nó cho biết các chức năng đó là:

Thực hiện phép so sánh và trao đổi nguyên tử trên quy định giá trị. Chức năng so sánh hai giá trị 32-bit định và trao đổi với một giá trị 32-bit dựa trên kết quả của việc so sánh .

nhưng đối với InterlockedCompareExchangeAcquire(),

Các hoạt động được thực hiện với ngữ nghĩa truy cập bộ nhớ đạt được.

và cho InterlockedCompareExchangeRelease(),

Việc trao đổi được thực hiện với ngữ nghĩa truy cập bộ nhớ phát hành.

Vì vậy, tôi tò mò về sự khác biệt giữa hai hàm này. Khi sử dụng ngữ nghĩa Có được truy cập bộ nhớ hoặc phát hành truy cập bộ nhớ ngữ nghĩa? Có ví dụ nào không?

Cảm ơn!

Trả lời

1

tôi thấy thisthis trên MSDN:

ngữ nghĩa bộ nhớ Có được xác định rằng các hoạt động bộ nhớ được thực hiện bởi các chủ đề hiện tại sẽ được hiển thị trước khi bất kỳ hoạt động bộ nhớ khác đang cố gắng. Phát hành ngữ nghĩa bộ nhớ chỉ định rằng hoạt động bộ nhớ được thực hiện bởi luồng hiện tại sẽ được hiển thị sau khi tất cả các hoạt động bộ nhớ khác đã được hoàn thành. Các ngữ nghĩa này cho phép bạn ép buộc các hoạt động bộ nhớ được thực hiện theo một thứ tự cụ thể. Sử dụng ngữ nghĩa có được khi vào khu vực được bảo vệ và phát hành ngữ nghĩa khi rời khỏi nó.

Các vấn đề liên quan