Interlocked.MemoryBarrierProcessWide Metodo

Definizione

Offre una barriera di memoria estesa ai processi che assicura che le letture e le scritture da qualsiasi CPU non possano superare 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 spostarsi attraverso la barriera. La barriera di memoria a livello di processo garantisce che qualsiasi lettura o scrittura da qualsiasi CPU usata nel processo non possa attraversare la barriera.

  • La normale barriera di memoria consente l'accesso condiviso ragionevole se ogni thread che accede ai dati usa barriere. La barriera di memoria a livello di processo forza altre CPU per la sincronizzazione con la memoria del processo, ad esempio per scaricare i 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 normale barriera di memoria impone un sovraccarico molto ridotto; le normali operazioni interlocked probabilmente costano meno di cento cicli. La barriera di memoria a livello di processo è molto costosa. Deve forzare ogni CPU nel processo a fare qualcosa, a un costo probabile di migliaia di cicli.

Il MemoryBarrierProcessWide metodo soffre anche di tutte le sottigliezze della programmazione senza blocco. 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 in Windows e sys_membarrier in Linux.

Si applica a