¿Cuál es la diferencia entre InterlockedCompareExchangeRelease()
y InterlockedCompareExchangeAcquire()
?¿Cuál es la diferencia entre InterlockedCompareExchange Release() y Acquire()?
Cuando trato de aprender las funciones de sincronización con la API de Win32, me parece que hay dos funciones con nombre diferente, pero parece hacer la misma cosa:
LONG __cdecl InterlockedCompareExchangeRelease(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
y
LONG __cdecl InterlockedCompareExchangeAcquire(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
puedo comprobar el MSDN, dice que esas funciones son:
Realiza una operación atómica de comparación e intercambio en el especificado valores. La función compara dos valores de 32 bits especificados y intercambios con otro valor de 32 bits según el resultado de la comparación .
pero para InterlockedCompareExchangeAcquire()
,
La operación se realiza con la semántica de acceso a la memoria de adquisición.
y para InterlockedCompareExchangeRelease()
,
El intercambio se lleva a cabo con la semántica de acceso a memoria liberación.
Tengo curiosidad acerca de la diferencia entre estas dos funciones. Cuándo utilizar el adquirir la semántica de acceso a la memoria o memoria de acceso de liberación semántica? ¿Hay algún ejemplo?
Gracias!