Interlocked.MemoryBarrierProcessWide Metodo

Definizione

Fornisce una barriera di memoria a livello di processo che garantisce che le letture e le scritture da qualsiasi CPU non possano spostarsi attraverso la barriera.

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

Commenti

Il MemoryBarrierProcessWide metodo differisce dal metodo "normale" MemoryBarrier come indicato di seguito:

  • La barriera di memoria normale garantisce che le letture e le scritture dalla CPU corrente non possano superare la barriera. La barriera di memoria a livello di processo garantisce che qualsiasi lettura o scrittura da qualsiasi CPU usata nel processo non possa superare la barriera.

  • La barriera di memoria normale consente un accesso condiviso ragionevole se ogni thread che accede ai dati usa barriere. La barriera di memoria a livello di processo forza la sincronizzazione di altre CPU con la memoria di processo, ad esempio per scaricare buffer di scrittura e sincronizzare i buffer di lettura. In questo modo è possibile eseguire operazioni non interlock in alcuni thread e avere comunque accesso condiviso ragionevole.

  • La barriera di memoria normale impone un sovraccarico molto ridotto; le normali operazioni interlocked probabilmente costano meno di un centinaio di cicli. La barriera di memoria a livello di processo è molto costosa. Deve forzare ogni CPU nel processo fare qualcosa, a un costo probabile di migliaia di cicli.

Il MemoryBarrierProcessWide metodo soffre anche di tutte le sottigliezze della programmazione senza blocchi. Tuttavia, questo metodo può essere estremamente utile quando è effettivamente necessario chiamarlo, che dovrebbe essere raro.

Questo metodo esegue il wrapping di una chiamata a FlushProcessWriteBuffers su Windows e sys_membarrier in Linux.

Si applica a