В чем разница между InterlockedCompareExchangeRelease()
и InterlockedCompareExchangeAcquire()
?
Когда я пытаюсь изучить функции синхронизации с 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
);
Я проверяю MSDN, он говорит, что эти функции:
Выполняет атомарную операцию сравнения и обмена для указанногоценности.Функция сравнивает два указанных 32-разрядных значения и обменивается с другим 32-разрядным значением на основе результата сравнения.
, но для InterlockedCompareExchangeAcquire()
,
.операция выполняется с семантикой доступа к памяти.
и для InterlockedCompareExchangeRelease()
,
Обмен выполняется с семантикой доступа к памяти освобождения.
Так что мне интересно узнать разницу между этими двумя функциями.Когда использовать получить семантику доступа к памяти или освободить семантику доступа к памяти ?Есть ли примеры?
Спасибо!