Qual è la differenza tra InterlockedCompareExchangeRelease()
e InterlockedCompareExchangeAcquire()
?Qual è la differenza tra InterlockedCompareExchange Release() e Acquire()?
Quando provo ad imparare le funzioni di sincronizzazione con Win32 API, trovo ci sono due funzioni denominate in modo diverso, ma sembra fare la stessa cosa:
LONG __cdecl InterlockedCompareExchangeRelease(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
e
LONG __cdecl InterlockedCompareExchangeAcquire(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
I controllare la MSDN, dice che quelle funzioni sono:
Esegue un'operazione di confronto e di scambio atomico sul valore specificato valori. La funzione confronta due valori a 32 bit specificati e gli scambi con un altro valore a 32 bit in base all'esito del confronto .
ma per InterlockedCompareExchangeAcquire()
,
L'operazione viene eseguita con la semantica di accesso alla memoria acquisire.
e per InterlockedCompareExchangeRelease()
,
Lo scambio viene eseguita con la semantica di accesso alla memoria di rilascio.
Quindi sono curioso della differenza tra queste due funzioni. Quando utilizzare la semantica di accesso alla memoria o per la memoria di accesso alla memoria di rilascio ? Ci sono degli esempi?
Grazie!