İç işlevleri _InterlockedExchangeAdd
Microsoft'a Özgü
Win32 Windows SDK'sı _InterlockedExchangeAdd iç işlevler işlevi için derleyici iç desteği sağlayın.
Sözdizimi
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
);
Parametreler
Toplanan
[in, out] Eklenecek değer; değerini toplama sonucuyla değiştirir.
Value
[in] Eklenecek değer.
Dönüş değeri
Dönüş değeri, parametresi tarafından işaret edilen değişkenin Addend
ilk değeridir.
Gereksinimler
Içsel | Mimari | Üst bilgi |
---|---|---|
_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> |
Açıklamalar
İçerdikleri veri türlerine ve işlemciye özgü alma veya yayın semantiği kullanılıp kullanılmadığına bağlı olarak değişen çeşitli varyasyonlar _InterlockedExchangeAdd
vardır.
_InterlockedExchangeAdd
İşlev 32 bit tamsayı değerleri üzerinde çalışırken, _InterlockedExchangeAdd8
8 bit tamsayı değerlerinde_InterlockedExchangeAdd16
, 16 bit tamsayı değerlerinde ve _InterlockedExchangeAdd64
64 bit tamsayı değerlerinde çalışır.
ARM platformlarında, kritik bir bölümün başında ve _rel
sonunda olduğu gibi alma ve yayın semantiğine ihtiyacınız varsa iç bilgileri ve sonekleri _acq
kullanın. ("Çit yok") soneki olan _nf
iç bileşenler bir bellek engeli görevi görmez.
Donanım Kilidi Elision (HLE) yönergelerini destekleyen Intel platformlarında, ve _HLERelease
sonekleri ile _HLEAcquire
iç bilgiler, donanımda kilit yazma adımını ortadan kaldırarak performansı hızlandırabilecek işlemciye yönelik bir ipucu içerir. Bu iç öğeler HLE'yi desteklemeyen platformlarda çağrılırsa ipucu yoksayılır.
Bu yordamlar yalnızca iç yordamlar olarak kullanılabilir. /Oi veya #pragma iç kullanıldığında bile bunlar içseldir. Bu iç bilgilerde #pragma işlevi kullanmak mümkün değildir.
Örnek
kullanma _InterlockedExchangeAdd
örneği için bkz . _InterlockedDecrement.
END Microsoft'a Özgü
Ayrıca bkz.
Derleyici iç bilgileri
Anahtar Sözcükler
x86 Derleyicisi ile Çakışma