Interlocked.MemoryBarrierProcessWide Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece uma barreira de memória em todo o processo que garante que as leituras e escritas de qualquer CPU não possam atravessar essa barreira.
public:
static void MemoryBarrierProcessWide();
public static void MemoryBarrierProcessWide();
static member MemoryBarrierProcessWide : unit -> unit
Public Shared Sub MemoryBarrierProcessWide ()
Observações
O MemoryBarrierProcessWide método difere do método "normal" MemoryBarrier da seguinte forma:
A barreira de memória normal garante que as leituras e escritas da CPU atual não conseguem atravessar a barreira. A barreira de memória em todo o processo assegura que qualquer leitura ou escrita de qualquer CPU utilizada no processo não possa atravessar a barreira.
A barreira de memória normal permite um acesso partilhado razoável se cada thread que acede aos dados usar barreiras. A barreira de memória em todo o processo obriga outros CPUs a sincronizarem-se com a memória do processo (por exemplo, para limpar buffers de escrita e sincronizar buffers de leitura). Isto permite operações não interligadas em alguns threads e ainda assim ter acesso partilhado razoável.
A barreira de memória normal impõe muito pouca sobrecarga; Operações interligadas normais provavelmente custavam menos de cem ciclos. A barreira de memória em todo o processo é muito cara. Tem de forçar todos os CPUs no processo a fazer algo, a um custo provável de milhares de ciclos.
O MemoryBarrierProcessWide método também sofre de todas as subtilezas da programação sem bloqueios. No entanto, este método pode ser extremamente útil quando realmente precisa de o pedir, o que deve ser raro.
Este método envolve uma chamada para FlushProcessWriteBuffers no Windows e sys_membarrier no Linux.