共用方式為


interlockedCompareExchange 函式 (winnt.h)

在指定的值上執行不可部分完成的比較和交換作業。 函式會根據比較的結果,比較兩個指定的 32 位值,並與另一個 32 位值交換。

如果您要交換指標值,此函式已被 InterlockedCompareExchangePointer 函 式取代。

若要在 64 位值上運作,請使用 InterlockedCompareExchange64 函式。

語法

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
  [in]      LONG          ExChange,
  [in]      LONG          Comperand
);

參數

[in, out] Destination

目的地值的指標。

[in] ExChange

交換值。

[in] Comperand

要與 Destination比較的值。

傳回值

函式會傳回 Destination 參數的初始值。

備註

函式會比較 Destination 值與 Compareand 值。 如果 Destination 值等於 Comparand 值, Exchange 值會儲存在 Destination所指定的位址中。 否則,不會執行任何作業。

此函式的參數必須在 32 位界限上對齊;否則,函式會在多處理器 x86 系統和任何非 x86 系統上發生無法預期的行為。 malloccallocHeapAllocHeapReAlloc 提供足夠對齊的記憶體。

連結函式提供簡單的機制,可同步存取多個執行緒所共用的變數。 此函式對其他連結函式的呼叫是不可部分完成的。

此函式會盡可能使用編譯器內建函式來實作。 如需詳細資訊,請參閱 WinBase.h 標頭檔及 _InterlockedCompareExchange

此函式會產生完整的記憶體屏障 (或柵欄) ,以確保記憶體作業會依序完成。

Itanium 型系統: 對於效能關鍵性應用程式,請改用 InterlockedCompareExchangeAcquireInterlockedCompareExchangeRelease

注意 Windows RT 型系統上支援此函式。
 

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 winnt.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

Interlocked Variable Access

InterlockedCompare64Exchange128

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

同步處理函式