【发布时间】:2021-06-08 12:25:39
【问题描述】:
我正在阅读 C++ Concurrency in Action 第 5 章。 本章说,
请注意,尽管您可以使用 std::atomic
或 std::atomic ,因为内置浮点类型确实满足与 memcpy 和 memcmp 一起使用的标准,但在compare_exchange_strong 的情况。即使旧存储值的值与比较数相等,如果存储值具有不同的表示形式,操作也可能失败。请注意,浮点值没有原子算术运算。如果您将 std::atomic 与定义了相等比较运算符的用户定义类型一起使用,并且该运算符与使用 memcmp 的比较不同,那么您将获得与 compare_exchange_strong 类似的行为 - 操作可能会失败,因为否则 -相等的值有不同的表示。
但我不明白为什么会这样。
-
如果float和double都可以使用memcpy和memcmp,那么做compare_exchange_strong这样的原子操作有什么问题?
-
我也不能使用 compare_exchange_weak 吗?
-
以上段落,“差异表示”是什么意思?
【问题讨论】:
标签: c++ c++11 concurrency atomic