在 C++11 标准中,第 1.10/5 节提到但没有正式定义术语acquire operation
、release operation
和consume operation
. 然后在第 29 节继续使用这些术语来描述某些内存排序、原子操作和内存栅栏的操作。例如,关于“秩序和一致性”的 29.3/1 指出:
memory_order_release、memory_order_acq_rel和memory_order_seq_cst:存储操作对受影响的内存位置执行释放操作[强调添加]。
这种类型的语言在第 29 节中重复出现,但让我有点困扰的是memory_order
枚举的所有含义都基于操作类型,这些操作类型本身似乎没有被标准形式化,但必须具有一些普遍同意的含义作为定义有效。
换一种说法,如果我说“一个 bar 是一个翻转的 foo”,那么bar和foo的具体含义是模棱两可的,因为这两个术语都没有正式定义。仅定义了它们的相对性质。
acquire operation
C++11 标准或其他一些 C++11 标准委员会文件是否正式定义了,等究竟是什么release operation
,或者这些只是普遍理解的术语?如果是后者,对于这些操作的含义,是否有一个很好的参考被认为是行业标准?我特别问,因为硬件内存一致性模型不是平等的,因此我认为必须有一些普遍同意的参考,允许那些实现编译器等的人正确地将这些操作的语义转换为本机汇编命令。