InterlockedCompareExchangeRelease()
和InterlockedCompareExchangeAcquire()
有什麼區別?InterlockedCompareExchange Release()和Acquire()有什麼區別?
當我嘗試學習用WIN32 API同步功能,我發現有不同的命名兩種功能,但似乎做同樣的事情:
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
);
我檢查它說這些功能是:
對指定的指令執行原子比較和交換操作 值。該功能將比較兩個指定的32位值和 與另一個32位值的交換,並根據 比較的結果進行交換。
但對於InterlockedCompareExchangeAcquire()
,
與獲取存儲器訪問語義執行操作。
和InterlockedCompareExchangeRelease()
,
交換與發行存儲器存取語義進行。
所以我很好奇這兩個功能的區別。 何時使用獲取內存訪問語義或釋放內存訪問語義? 有沒有例子?
謝謝!