Interlocked.MemoryBarrierProcessWide Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma barreira de memória em todo o processo, que garante que leituras e gravações de qualquer CPU não possam se mover pela barreira.
public:
static void MemoryBarrierProcessWide();
public static void MemoryBarrierProcessWide ();
static member MemoryBarrierProcessWide : unit -> unit
Public Shared Sub MemoryBarrierProcessWide ()
Comentários
O MemoryBarrierProcessWide
método difere do método "normal" MemoryBarrier da seguinte maneira:
A barreira de memória normal garante que as leituras e gravações da CPU atual não possam se mover pela barreira. A barreira de memória em todo o processo garante que qualquer leitura ou gravação de qualquer CPU usada no processo não possa se mover pela barreira.
A barreira de memória normal permite acesso compartilhado razoável se cada thread que acessa os dados usar barreiras. A barreira de memória em todo o processo força outras CPUs a sincronizar com a memória do processo (por exemplo, para liberar buffers de gravação e sincronizar buffers de leitura). Isso permite operações não interligadas em alguns threads e ainda tem acesso compartilhado razoável.
A barreira de memória normal impõe muito pouca sobrecarga; as operações intertravadas normais provavelmente custam menos de cem ciclos. A barreira de memória em todo o processo é muito cara. Ele tem que forçar cada CPU no processo a fazer algo, a um custo provável de milhares de ciclos.
O MemoryBarrierProcessWide
método também sofre de todas as sutilezas da programação sem bloqueio. No entanto, esse método pode ser extremamente útil quando você realmente precisa chamá-lo, o que deve ser raro.
Esse método encapsula uma chamada para FlushProcessWriteBuffers no Windows e sys_membarrier no Linux.