Interlocked.MemoryBarrierProcessWide 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供覆盖整个过程的内存屏障,确保来自任何 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 的调用。