Jas*_*son 21 c++ standards c++11
在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",bar和foo的具体含义是模棱两可的,因为这两个术语都没有正式定义.只定义了它们的相对性质.
请问C++的11个标准,或其他一些C++ 11标准委员会文件正式准确定义的是什么acquire operation
,release operation
等等是,或者是这些简单的通常理解的术语?如果是后者,是否有一个很好的参考被认为是这些操作含义的行业标准?我特别要求,因为硬件内存一致性模型不是相同的,因此我认为必须有一些共同商定的引用,允许那些实现编译器等的人正确地将这些操作的语义转换为本机程序集命令.
其中一个注释中给出了非正式的汇总定义:
执行释放操作以
A
强制对其他存储器位置的先前副作用变为对其后执行消耗或获取操作的其他线程可见A
.
除此之外,获取和释放操作的行为在1.10中完全定义,特别是它们如何在关系之前发生.除了行为之外的任何定义都是无用的.