Interlocked.MemoryBarrierProcessWide Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.