"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 中没有没有原子对象的原子操作。这是自愿固定的,这样访问这些对象的原子性就永远不会受到损害。
在 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 中没有没有原子对象的原子操作。这是自愿固定的,这样访问这些对象的原子性就永远不会受到损害。