В чем разница между InterlockedCompareExchange Release() и Acquire()?

В чем разница между 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(),

Обмен выполняется с семантикой доступа к памяти освобождения.

Итак, мне интересно узнать разницу между этими двумя функциями. Когда использовать семантику доступа к памяти или семантику доступа к памяти освобождения ? Есть примеры?

Спасибо!

6
задан Alex Lockwood 19 March 2012 в 04:17
поделиться