Aracılığıyla paylaş


_InterlockedAdd iç işlevleri

Microsoft'a Özgü

Bu işlevler, paylaşılan değişkene birden fazla iş parçacığı erişimi olduğunda işlemin başarıyla tamamlanmasını sağlayan atomik bir ekleme gerçekleştirir.

Sözdizimi

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
);

Parametreler

Toplanan
[in, out] Eklenecek tamsayı işaretçisi; değerini toplama sonucuyla değiştirir.

Value
[in] Eklenecek değer.

Dönüş değeri

Her iki işlev de toplamanın sonucunu döndürür.

Gereksinimler

Içsel Mimari
_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 üst bilgi dosyası<>

Açıklamalar

Bu işlevlerin veya _rel sonekleri içeren _acq sürümleri, alma veya sürüm semantiğinden sonra birbirine kenetlenmiş bir ekleme gerçekleştirir. Alma semantiği , işlemin sonucunun daha sonraki bellek okuma ve yazma işlemlerinden önce tüm iş parçacıkları ve işlemciler tarafından görünür hale getirildiğini gösterir. Alma, kritik bir bölüm girerken kullanışlıdır. Yayın semantiği , işlemin sonucu kendisi görünür hale getirilmeden önce tüm bellek okumalarının ve yazmalarının tüm iş parçacıkları ve işlemciler tarafından görünür hale getirilmeye zorlandığı anlamına gelir. Yayın, kritik bir bölümden ayrılırken kullanışlıdır. ("Çit yok") soneki olan _nf iç bileşenler bir bellek engeli görevi görmez.

Bu yordamlar yalnızca iç yordamlar olarak kullanılabilir.

Örnek: _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);
}

Çıktı: _InterlockedAdd

0xffffff00 0xff0000 0xffffff00

Örnek: _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;
}

Çıktı: _InterlockedAdd64

ff0000000000 + ff0000ffffffff = ffff00ffffffff
Return value: ffff00ffffffff

END Microsoft'a Özgü

Ayrıca bkz.

Derleyici iç bilgileri
x86 Derleyicisi ile Çakışma