다음을 통해 공유


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 .

적용 대상