내장 함수 _InterlockedExchangeAdd
Microsoft 전용
Win32 Windows SDK _InterlockedExchangeAdd 내장 함수 함수에 대한 컴파일러 내장 지원을 제공합니다.
구문
long _InterlockedExchangeAdd(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_acq(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_rel(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_nf(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLEAcquire(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLERelease(
long volatile * Addend,
long Value
);
char _InterlockedExchangeAdd8(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_acq(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_rel(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_nf(
char volatile * Addend,
char Value
);
short _InterlockedExchangeAdd16(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_acq(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_rel(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_nf(
short volatile * Addend,
short Value
);
__int64 _InterlockedExchangeAdd64(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_nf(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLEAcquire(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLERelease(
__int64 volatile * Addend,
__int64 Value
);
매개 변수
가수
[in, out] 추가할 값입니다. 는 추가 결과로 대체됩니다.
값
[in] 추가할 값입니다.
반환 값
반환 값은 Addend
매개 변수가 가리키는 변수의 초기 값입니다.
요구 사항
Intrinsic | 아키텍처 | 헤더 |
---|---|---|
_InterlockedExchangeAdd , , _InterlockedExchangeAdd8 _InterlockedExchangeAdd16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_acq , _InterlockedExchangeAdd_rel , _InterlockedExchangeAdd_nf , _InterlockedExchangeAdd8_acq , _InterlockedExchangeAdd8_rel , _InterlockedExchangeAdd8_nf ,_InterlockedExchangeAdd16_acq , _InterlockedExchangeAdd16_rel , _InterlockedExchangeAdd16_nf , _InterlockedExchangeAdd64_acq _InterlockedExchangeAdd64_rel _InterlockedExchangeAdd64_nf |
ARM, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_HLEAcquire , _InterlockedExchangeAdd_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchangeAdd64_HLEAcquire , _InterlockedExchangeAdd64_HLErelease |
X64 | <immintrin.h> |
설명
사용되는 데이터 형식과 프로세서별 획득 또는 해제 의미 체계에 따라 다른 _InterlockedExchangeAdd
의 여러 변형이 있습니다.
_InterlockedExchangeAdd
함수는 32비트 정수 값에 대해 작동하는 반면 _InterlockedExchangeAdd8
은 8비트 정수 값에 대해, _InterlockedExchangeAdd16
은 16비트 정수 값에 대해, 그리고 _InterlockedExchangeAdd64
는 64비트 정수 값에 대해 작동합니다.
ARM 플랫폼에서는 임계 영역의 시작 및 끝과 같은 위치에서 의미 체계를 획득하고 해제하려면 _acq
및 _rel
접미사가 포함된 내장 함수를 사용합니다. ("펜스 없음" 접미사가 있는 _nf
내장 함수는 메모리 장벽으로 작동하지 않습니다.
HLE(Hardware Lock Elision) 명령을 지원하는 Intel 플랫폼에서 _HLEAcquire
및 _HLERelease
접미사가 포함된 내장 함수는 하드웨어에서 잠금 쓰기 단계를 제거하여 성능을 향상시킬 수 있는 힌트를 프로세서에 포함합니다. HLE을 지원하지 않는 플랫폼에서 이러한 내장 함수를 호출하면 힌트가 무시됩니다.
이러한 루틴은 내장 함수로만 사용할 수 있습니다. /Oi 또는 #pragma 내장 함수를 사용하는 경우에도 내장입니다. 이러한 내장 함수에는 #pragma 함수를 사용할 수 없습니다.
예시
사용 _InterlockedExchangeAdd
방법에 대한 샘플은 _InterlockedDecrement 참조하세요.
Microsoft 전용 종료
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기