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.
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.