Interlocked.MemoryBarrierProcessWide Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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.