"atomic object" 的定义

Definition of "atomic object"

在 C 和 C++ 的标准行话中,短语“atomic object”表示“object of atomic type ,”不是吗?

没有任何标准会明确定义每一个双词短语,因此 C 和 C++ 标准不会因为省略这一短语的明确定义而受到指责。尽管如此,当我阅读 C++17 标准(草案 here)时,第 1 节。 4.7.1(4),"all modifications to a particular atomic object M occur in some particular total order, called the modification order of M"——当标准反复使用类似的语言来界定更精确的并发逻辑时——我想确保我没有无意中产生误解。

我假设短语 "atomic object" 的意思是否正确

我能想到的唯一可能的替代方案是该短语的意思是

请问是哪一个?

(注意:我把这个问题标记为 C 和 C++,因为当涉及到原子时,这两个标准使用几乎相同的语言。因此,据我所知,任何一种语言的专家都可以回答。如果由于某些原因我弄错了,请删除 C 标签并保留 C++。)

参考:另见 我的问题是初步的。

在我看来原子性 - 严格来说 - 不适用于类型或对象,它适用于操作,即你可以说一个操作是原子的还是不是原子的。

通过 "atomic object" 我们理解一个对象,其 public 接口仅公开原子操作,即您可以对该对象执行的所有操作都是原子的。

在C和C++中,概念的定义可能是相反的:首先定义原子对象,然后根据原子对象定义原子操作。 C 和 C++ 以这种方式定义它可能是有意义的,因为标准的措辞主要与定义语言有关。然而,从理论和抽象功能的角度来看,原子操作是主要关注点。

C++ 具有符合上述描述的标准 std::atomic<T> class 模板。

C++ 标准对操作和操作对原子对象的影响施加了一组规则 ([intro.races])。如果一个对象上的所有操作都满足这些规则,那么该对象就是原子的。

the phrase "atomic object" means "object of atomic type," does it not?

标准中没有这样写。但由于操作的效果是由对象的类型决定的,所以这不是一个不合理的结论。也相应地:原子类型是实例是原子对象的类型。

C++ 标准库提供了一组保证是原子的类型,以及保证是原子操作的那些类型的函数 ([atomics])。

properly aligned object small enough that hardware could handle it atomically.

C++ 标准没有规定原子对象的对齐方式或大小。

如果保证 object/type 是原子的(参见 [atomics]),并且如果硬件对原子性有这样的要求,那么语言的实现必须保证满足这些要求,或者实现必须使用锁来强制执行原子性。

我可以回答C,但C++确实打算在这些点上与C同步。

是的,当 C 标准谈​​到 "atomic object" 时,它表示具有原子限定的有效类型的对象。但似乎也没有明确地写下来,所以添加它可能是个好主意。我会注意的。

另外,除了某些人所说的,C 中没有没有原子对象的原子操作。这是自愿固定的,这样访问这些对象的原子性就永远不会受到损害。