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 还受到无锁编程的所有微妙之处。 然而,当你实际需要调用此方法时,此方法非常有用,这应该很少见。
此方法包装对 linux 上的 Windows 和 上的 sys_membarrier 调用。