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 。