Freigeben über


Interlocked.MemoryBarrierProcessWide Methode

Definition

Bietet eine prozessübergreifende Arbeitsspeicherbarriere, die verhindert, dass Lese- und Schreibvorgänge von CPUs über die Barriere hinaus verschoben werden.

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

Hinweise

Die MemoryBarrierProcessWide Methode unterscheidet sich von der "normal" MemoryBarrier -Methode wie folgt:

  • Die normale Speicherbarriere stellt sicher, dass die Lese- und Schreibvorgänge von der aktuellen CPU nicht über die Barriere hinweg verschoben werden können. Durch die prozessweite Speicherbarriere wird sichergestellt, dass alle lese- oder schreibvorgänge von einer CPU, die im Prozess verwendet wird, nicht über die Barriere verschoben werden können.

  • Die normale Speicherbarriere ermöglicht einen angemessenen freigegebenen Zugriff, wenn jeder Thread, der auf die Daten zugreift, Barrieren verwendet. Die prozessweite Speicherbarriere erzwingt andere CPUs zum Synchronisieren mit Prozessspeicher (z. B. zum Leeren von Schreibpuffern und Synchronisieren von Lesepuffern). Dies ermöglicht nicht versperrte Vorgänge in einigen Threads und hat weiterhin einen angemessenen freigegebenen Zugriff.

  • Die normale Speicherbarriere setzt sehr wenig Aufwand ein; Normale interlockierte Vorgänge kosten wahrscheinlich weniger als hundert Zyklen. Die prozessweite Speicherbarriere ist sehr teuer. Es muss jede CPU im Prozess zu etwas zwingen, bei einer wahrscheinlichen Kosten von Tausenden von Zyklen.

Die MemoryBarrierProcessWide Methode leidet auch unter allen Subtilitäten der sperrfreien Programmierung. Dennoch kann diese Methode äußerst nützlich sein, wenn Sie es tatsächlich aufrufen müssen, was selten sein sollte.

Mit dieser Methode wird ein Aufruf von FlushProcessWriteBuffers unter Windows und sys_membarrier unter Linux umgebrochen.

Gilt für