thb*_*thb 22 c c++ atomic definition language-lawyer
在C和C++的标准术语,短语" 原子对象 "是指" 物体的原子类型, "不是吗?
没有标准会明确定义每个双字短语,因此没有错误的C和C++标准,因为省略了这个短语的明确定义.然而,当我读到C++ 17标准(这里的草案)时,教派.4.7.1(4),即"所有的修改以使特定原子对象中号发生在一些特定的总次序,被称为修饰顺序的中号 " -和当标准反复采用类似的语言来分隔以往更精确逻辑并发-I我想确保我不会无意中误解.
我是否正确地假设短语"原子对象"的意思
我能想象的唯一合理的选择是这个短语的意思
请问是哪一个?
(注意:我在C和C++上都标记了这个问题,因为当涉及原子时,这两个标准使用几乎相同的语言.因此,就我所知,任何一种语言的专家都可以回答.如果由于某种原因,我是错了,那么请删除C标签并保留C++.)
参考:另见这个问题,我的问题是初步的.
bol*_*lov 18
在我看来,原子性 - 严格来说 - 不适用于类型或对象,它适用于操作,即你可以说操作是原子的或不是.
但是,当您说"原子对象"时,您实际上是指一个对象,其公共接口仅公开原子操作,即您可以对该对象执行的所有操作都是原子操作.
在C和C++中,它们可能是以相反的方式定义的:首先定义原子对象,然后根据原子对象定义原子操作.
C++具有std::atomic<T>符合上述描述的标准类模板.
C++标准对原子对象的操作和操作的效果施加了一组规则([intro.races]).如果对象上的所有操作都满足这些规则,那么该对象是原子的.
短语"原子对象"的意思是"原子类型的对象",不是吗?
标准中没有措辞.但由于操作的效果取决于对象的类型,因此这不是一个不合理的结论.也相应地:原子类型是其实例是原子对象的类型.
C++标准库提供了一组保证为原子的类型,以及保证为原子操作的那些类型的函数([atomics]).
正确对齐的对象足够小,硬件可以原子地处理它.
C++标准没有指定原子对象的对齐或大小.
如果保证对象/类型是原子的(参见[atomics]),并且硬件对原子性有这样的要求,那么语言的实现必须保证满足这些要求,或者实现必须使用锁来强制执行原子.