Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

_InterlockedExchangeAdd Intrinsic Functions 

Microsoft Specific

Provide compiler intrinsic support for the Win32 Platform SDK _InterlockedExchangeAdd Intrinsic Functions function.


long _InterlockedExchangeAdd(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_acq(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_rel(
   long volatile * Addend,
   long Value
);
__int64 _InterlockedExchangeAdd64(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
   __int64 volatile * Addend,
   __int64 Value
);

Parameters

[in, out] Addend

The value to be added to; replaced by the result of the addition.

[in] Value

The value to add.

The return value is the initial value of the variable pointed to by the Addend parameter.

Intrinsic Architecture

_InterlockedExchangeAdd

x86, IPF, x64

_InterlockedExchangeAdd_acq

IPF

_InterlockedExchangeAdd_rel

IPF

_InterlockedExchangeAdd64

IPF, x64

_InterlockedExchangeAdd64_acq

IPF

_InterlockedExchangeAdd64_rel

IPF

Header file <intrin.h>

There are several variations on _InterlockedExchangeAdd that vary based on the data types they involve and whether processor-specific acquire or release semantics is used.

While the _InterlockedExchangeAdd function operates on 32-bit integer values, _InterlockedExchangeAdd64 operates on 64-bit integer values.

The _InterlockedExchangeAdd_acq and _InterlockedExchangeAdd64_acq intrinsic functions are the same as the corresponding functions without the _acq suffix except that the operation is performed with acquire semantics, which is useful when entering a critical section.

There is no version of this function that uses release semantics.

In Visual C++ 2005, these functions behave as read-write memory barriers. For more information, see _ReadWriteBarrier.

These routines are only available as intrinsics. Thus, they are intrinsic whether or not /Oi or #pragma intrinsic is used. It is not possible to use #pragma function on these intrinsics.

For a sample of how to use _InterlockedExchangeAdd, see _InterlockedDecrement.

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.