Udostępnij za pośrednictwem


Interlocked.MemoryBarrierProcessWide Metoda

Definicja

Zapewnia barierę pamięci dla całego procesu, która gwarantuje, że odczyty i zapisy z dowolnego procesora CPU nie mogą poruszać się po barierze.

public:
 static void MemoryBarrierProcessWide();
public static void MemoryBarrierProcessWide ();
static member MemoryBarrierProcessWide : unit -> unit
Public Shared Sub MemoryBarrierProcessWide ()

Uwagi

Metoda MemoryBarrierProcessWide różni się od metody "normal" MemoryBarrier w następujący sposób:

  • Normalna bariera pamięci gwarantuje, że operacje odczytu i zapisu z bieżącego procesora CPU nie będą mogły poruszać się po barierze. Bariera pamięci dla całego procesu gwarantuje, że każdy odczyt lub zapis z jakiegokolwiek procesora CPU używanego w procesie nie będzie mógł przechodzić przez barierę.

  • Normalna bariera pamięci umożliwia rozsądny dostęp współużytkowany, jeśli każdy wątek, który uzyskuje dostęp do danych, używa barier. Bariera pamięci dla całego procesu wymusza synchronizację innych procesorów z pamięcią procesu (na przykład opróżnianie buforów zapisu i synchronizowanie buforów odczytu). Umożliwia to wykonywanie operacji bez blokady w niektórych wątkach i nadal ma rozsądny dostęp współużytkowany.

  • Normalna bariera pamięci nakłada bardzo niewielkie obciążenie; normalne operacje połączone prawdopodobnie kosztują mniej niż sto cykli. Bariera pamięci dla całego procesu jest bardzo kosztowna. Musi wymusić wykonywanie każdego procesora CPU w procesie, przy prawdopodobnym koszcie tysięcy cykli.

Metoda MemoryBarrierProcessWide cierpi również na wszystkie subtelności programowania bez blokady. Niemniej jednak ta metoda może być bardzo przydatna, gdy trzeba ją wywołać, co powinno być rzadkie.

Ta metoda opakowuje wywołanie funkcji FlushProcessWriteBuffers w systemie Windows i sys_membarrier w systemie Linux.

Dotyczy