Interlocked.MemoryBarrierProcessWide 方法

定義

提供全進程記憶體屏障,確保從任何 CPU 讀取和寫入無法跨屏障移動。

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

備註

MemoryBarrierProcessWide 方法與「一般」 MemoryBarrier 方法的不同如下:

  • 正常的記憶體障礙確保目前 CPU 的讀寫無法跨越這個障礙。 整個程序的記憶體障礙確保任何 CPU 的讀取或寫入都無法跨越該障礙。

  • 如果 每個 存取資料的執行緒都使用障礙,一般的記憶體障礙允許合理的共享存取。 整個程序的記憶體障礙會迫使 其他 CPU 與程序記憶體同步(例如,刷新寫入緩衝區並同步讀取緩衝區)。 這讓部分執行緒能進行非互鎖操作,同時仍享有合理的共享存取權限。

  • 一般的記憶屏障幾乎沒有帶來額外負擔;一般的聯動操作成本可能不到一百個循環。 整個程序的記憶體障礙成本非常高昂。 它必須強制程序中的每個 CPU 執行某件事,這可能代價是數千個週期。

MemoryBarrierProcessWide 方法同時也存在無鎖程式設計的所有細微差異。 然而,當你真的需要打電話時,這種方法非常實用,而這種情況應該很少見。

此方法在 Windows 上會包裹呼叫 FlushProcessWriteBuffers,Linux 則為 sys_membarrier

適用於