次の方法で共有


Interlocked.MemoryBarrierProcessWide メソッド

定義

すべての CPU からの読み取りと書き込みがバリアを超えて移動できるように、プロセス全体のメモリ バリアを提供します。

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

注釈

メソッドは MemoryBarrierProcessWide 、次のように "normal" MemoryBarrier メソッドとは異なります。

  • 通常のメモリ バリアにより、現在の CPU からの読み取りと書き込みがバリアを越えて移動できなくなります。 プロセス全体のメモリ バリアにより、プロセスで使用されている CPU からの読み取りまたは書き込みがバリアを越えて移動できなくなります。

  • 通常のメモリ バリアでは、データにアクセス するすべての スレッドでバリアが使用されている場合、適切な共有アクセスが許可されます。 プロセス全体のメモリ バリアは、 他の CPU に プロセス メモリとの同期を強制します (たとえば、書き込みバッファーをフラッシュし、読み取りバッファーを同期します)。 これにより、一部のスレッドに対する非インターロック操作が可能になり、それでも妥当な共有アクセス権を持つことができます。

  • 通常のメモリ バリアでは、オーバーヘッドはほとんどありません。通常のインターロック操作のコストは 100 サイクル未満である可能性があります。 プロセス全体のメモリ バリアは非常に高価です。 プロセス内のすべての CPU に何らかの処理を強制する必要があります。何千ものサイクルのコストがかかる可能性があります。

メソッドは MemoryBarrierProcessWide 、ロックフリープログラミングのすべての微妙な問題にも苦しんでいます。 それでも、このメソッドは、実際に呼び出す必要がある場合に非常に役立ちます。これはまれです。

このメソッドは、Windows では FlushProcessWriteBuffers の呼び出しをラップし、Linux では sys_membarrier します。

適用対象