What's the difference between InterlockedCompareExchangeRelease()
and InterlockedCompareExchangeAcquire()
?
When I try to learn the synchronization functions with WIN32 API, I find there are two functions named differently but seems to do the same thing:
LONG __cdecl InterlockedCompareExchangeRelease(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
and
LONG __cdecl InterlockedCompareExchangeAcquire(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
I check the MSDN, it says those functions are:
Performs an atomic compare-and-exchange operation on the specified
values. The function compares two specified 32-bit values and
exchanges with another 32-bit value based on the outcome of the
comparison.
but for InterlockedCompareExchangeAcquire()
,
The operation is performed with acquire memory access semantics.
and for InterlockedCompareExchangeRelease()
,
The exchange is performed with release memory access semantics.
So I'm curious about the difference between these two functions.
When to use the acquire memory access semantics or release memory access semantics?
Are there any examples?
Thanks!
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…