Interlocked.MemoryBarrierProcessWide 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供全進程記憶體屏障,確保從任何 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。