共用方式為


_InterlockedAdd內建函式

Microsoft 特定的

這些函式會執行不可部分完成的加法,這可確保當多個執行緒可以存取共用變數時,作業會順利完成。

語法

long _InterlockedAdd(
   long volatile * Addend,
   long Value
);
long _InterlockedAdd_acq(
   long volatile * Addend,
   long Value
);
long _InterlockedAdd_nf(
   long volatile * Addend,
   long Value
);
long _InterlockedAdd_rel(
   long volatile * Addend,
   long Value
);
__int64 _InterlockedAdd64(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedAdd64_acq(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedAdd64_nf (
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedAdd64_rel(
   __int64 volatile * Addend,
   __int64 Value
);

參數

附加元件
[in, out]要加入之整數的指標;取代為加法的結果。


[in]要加入的值。

傳回值

兩個函式都傳回相加的結果。

需求

內建 架構
_InterlockedAdd ARM、ARM64
_InterlockedAdd_acq ARM、ARM64
_InterlockedAdd_nf ARM、ARM64
_InterlockedAdd_rel ARM、ARM64
_InterlockedAdd64 ARM、ARM64
_InterlockedAdd64_acq ARM、ARM64
_InterlockedAdd64_nf ARM、ARM64
_InterlockedAdd64_rel ARM、ARM64

標頭檔 < intrin.h>

備註

這些函式的 _acq_rel 版本後置字元在取得或發行語意之後執行連鎖相加。 取得語意 表示作業的結果會在任何稍後的記憶體讀取和寫入之前,讓所有線程和處理器都能看見。 在進入關鍵區段時,取得非常有用。 釋放語意 表示,所有記憶體讀取和寫入都會強制在所有線程和處理器看到,然後作業的結果才會顯示本身。 離開關鍵區段時,發行非常有用。 具有 _nf (「無柵欄」) 尾碼的內建函式不會作為記憶體屏障。

這些常式僅以內建函式的形式供您使用。

範例: _InterlockedAdd

// interlockedadd.cpp
// Compile with: /Oi /EHsc
// processor: ARM
#include <stdio.h>
#include <intrin.h>

#pragma intrinsic(_InterlockedAdd)

int main()
{
        long data1 = 0xFF00FF00;
        long data2 = 0x00FF0000;
        long retval;
        retval = _InterlockedAdd(&data1, data2);
        printf("0x%x 0x%x 0x%x", data1, data2, retval);
}

輸出:_InterlockedAdd

0xffffff00 0xff0000 0xffffff00

範例: _InterlockedAdd64

// interlockedadd64.cpp
// compile with: /Oi /EHsc
// processor: ARM
#include <iostream>
#include <intrin.h>
using namespace std;

#pragma intrinsic(_InterlockedAdd64)

int main()
{
        __int64 data1 = 0x0000FF0000000000;
        __int64 data2 = 0x00FF0000FFFFFFFF;
        __int64 retval;
        cout << hex << data1 << " + " << data2 << " = " ;
        retval = _InterlockedAdd64(&data1, data2);
        cout << data1 << endl;
        cout << "Return value: " << retval << endl;
}

輸出:_InterlockedAdd64

ff0000000000 + ff0000ffffffff = ffff00ffffffff
Return value: ffff00ffffffff

END Microsoft 特定的

另請參閱

編譯器內建函式
與 x86 編譯器衝突