在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
枚举是基于本身似乎并没有被标准正式操作类型,但必须有一些共同商定的含义为它们是有效的定义。
把不同的方式,如果我说“酒吧是一个翻转富”, 酒吧和foo的具体含义是模糊的,因为没有长期的正式定义。 只有它们的相对性质定义。
请问C ++的11个标准,或其他一些C ++ 11标准委员会文件正式定义究竟是什么的acquire operation
, release operation
等的,或者是这些简单的通常理解的术语? 如果是后者,在那里被认为是对这些操作的意义的行业标准一个很好的参考? 我特意问,因为没有创建硬件内存一致性模型一致,因此我盘算必须有一些共同商定的基准,让那些执行编译器等,这些操作的语义正确转换为本地组装的命令。