【发布时间】:2013-04-10 21:39:46
【问题描述】:
似乎公认的获取和释放语义定义是这样的: (引自http://msdn.microsoft.com/en-us/library/windows/hardware/ff540496(v=vs.85).aspx)
如果其他处理器总是会看到,则操作具有获取语义 其在任何后续操作的效果之前的效果。一个操作有 如果其他处理器将看到前面的每一个,则释放语义 操作的效果先于操作本身的效果。
我已经简要了解了半内存屏障的存在,据推测它们具有遵循上述相同语义的获取屏障和释放屏障的味道。
查找我遇到 SFENCE 的硬件指令的真实示例。而这个博客(http://peeterjoot.wordpress.com/2009/12/04/intel-memory-ordering-fence-instructions-and-atomic-operations/)说这是一种释放栅栏/屏障:
英特尔提供了一个双向栅栏指令 MFENCE,一个获取 围栏 LFENCE 和释放围栏 SFENCE。
但是阅读 SFENCE 的定义,它似乎没有提供释放语义,因为它根本不与加载同步?而据我所知,发布语义定义了所有内存操作(加载和存储)的顺序。
【问题讨论】:
标签: multithreading concurrency memory-barriers