В чем разница между 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()
,
Обмен выполняется с семантикой доступа к памяти освобождения.
Итак, мне интересно узнать разницу между этими двумя функциями. Когда использовать семантику доступа к памяти или семантику доступа к памяти освобождения ? Есть примеры?
Спасибо!