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 的调用。

适用于