gpt4 book ai didi

c++ - 与 std::atomic 类型的比较语义

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:31 25 4
gpt4 key购买 nike

我试图找到类型 T 的比较语义在哪里与 std::atomic已定义。

我知道除了整数类型的内置特化之外,T可以是任何 TriviallyCopyable类型。但是像compare_and_exchange_X这样的操作是如何进行的?知道如何比较 T 的实例?

我想他们必须简单地对用户定义的对象(如 memcmp )进行逐字节比较,但我看不到标准中的哪里明确提到了这一点。

所以,假设我有:

struct foo
{
std::uint64_t x;
std::uint64_t y;
};

编译器如何知道如何比较两个 std::atomic<foo>我调用 std::atomic<foo>::compare_and_exchange_weak() 的例子?

最佳答案

在 n3936 草案中,memcmp 语义在第 29.6.5 节中明确描述。

Note: For example, the effect of atomic_compare_exchange_strong is if (memcmp(object, expected, sizeof(*object)) == 0) memcpy(object, &desired, sizeof(*object)); else memcpy(expected, object, sizeof(*object));

Note: The memcpy and memcmp semantics of the compare-and-exchange operations may result in failed comparisons for values that compare equal with operator== if the underlying type has padding bits, trap bits, or alternate representations of the same value.

该措辞至少从 n3485 开始就存在。

请注意,只有 memcmp(p1, p2, sizeof(T)) != 0compare_and_exchange_weak 有意义(保证失败)。 memcmp(p1, p2, sizeof(T)) == 0 允许但不保证成功。

关于c++ - 与 std::atomic 类型的比较语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com