Bagikan melalui


Fungsi MemoryBarrier (winnt.h)

Membuat hambatan memori perangkat keras (pagar) yang mencegah CPU memesan ulang operasi baca dan tulis. Ini juga dapat mencegah kompilator mengurutkan ulang operasi baca dan tulis.

Sintaks

void MemoryBarrier();

Mengembalikan nilai

Tidak ada

Keterangan

Gunakan makro ini atau fungsi yang saling mengunci ketika urutan operasi baca dan tulis memori sangat penting untuk operasi program.

Intrinsik pengkompilasi _ReadBarrier, _WriteBarrier, dan _ReadWriteBarrier mencegah pengurutan ulang kompilator saja. Dengan Visual Studio 2003, referensi volatil terhadap volatil diurutkan; pengkompilasi tidak akan memesan ulang akses variabel volatil . Dengan Visual Studio 2005, kompilator juga menggunakan akuisisi semantik untuk operasi baca pada variabel volatil dan semantik rilis untuk operasi tulis pada variabel volatil (ketika didukung oleh CPU). Untuk informasi selengkapnya, lihat Masalah Sinkronisasi dan Multiproscessor.

Makro ini dapat dipanggil pada semua platform prosesor di mana Windows didukung, tetapi tidak berpengaruh pada beberapa platform. Definisinya bervariasi dari platform ke platform. Berikut ini adalah beberapa definisi makro ini di Winnt.h.


#ifdef _AMD64_
#define MemoryBarrier __faststorefence
#endif

#ifdef _IA64_
#define MemoryBarrier __mf
#endif

// x86

FORCEINLINE
VOID
MemoryBarrier (
    VOID
    )
{
    LONG Barrier;
    __asm {
        xchg Barrier, eax
    }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header winnt.h (termasuk Windows.h)

Lihat juga

Akses Variabel Yang Saling Diblokir