获取和释放语义的公认定义似乎是这样的:(引自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/)说这是一种释放栅栏/屏障:
Intel 提供双向栅栏指令 MFENCE、获取栅栏 LFENCE 和释放栅栏 SFENCE。
但是阅读 SFENCE 的定义,它似乎没有提供释放语义,因为它根本不与负载同步?而据我了解,发布语义定义了所有内存操作(加载和存储)的顺序。