다음을 통해 공유


내장 함수 _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] 추가할 값입니다.

반환 값

두 함수는 모두 추가의 결과를 반환합니다.

요구 사항

Intrinsic 아키텍처
_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

Microsoft 전용 종료

참고 항목

컴파일러 내장 함수
x86 컴파일러와 충돌