对原子操作的最低要求
The least requirement for the atomic operation
本文关键字:原子操作 更新时间:2023-10-16
我只是想收集一些关于原子操作要求的循证信息。
例如(也许不对,只是一些例子)
在x86_64,当您在条目大小上书写或阅读长并按长对齐时,操作是AOTMIC,因为巴拉巴拉巴拉...
在x86_64,当您使用 GCC 原子基元写入或读取字节时,您对这些字节的操作将保持原子。
希望收到和帮助:)
引用专业C++:
对简单标量变量的简单赋值通常不需要 同步。例如,在 x86 上,32 位对齐的值为 在硬件级别和单个事务中以原子方式处理 不需要显式同步。例如,设置布尔值 值为 false 以停止线程不需要同步,但 对于任何给定的 op,像 ++、-- 或 op= 这样的操作都需要 同步。
这并不能回答您的所有问题,但这是您正在寻找的一部分吗?
如果您正在寻找芯片级保证,则需要查阅这些芯片的技术手册。在英特尔上,请查看软件开发人员手册,其中包含有关内存订购的完整信息。在这种情况下,原子的定义包括内存排序保证。基本保证列在"第 3 卷:8.2 内存排序"中,其中还标明了一些功能以"原子"方式运行。
请注意,完整的细节很复杂,需要详细了解芯片。这就是为什么 C 和 C++ 现在将它们包装在更高级别的保证中。您当然可以查阅这些各自的标准以查看其保证。
相关文章:
- 对OpenMP reduction子句中的变量执行原子操作
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 标记为 std::memory_order_seq_cst 的单个原子操作是否会在所有位置触发顺序一致性?
- 对单个变量的原子操作
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 为什么互斥对象与原子操作不同,前者是操作系统级,后者是处理器级
- 原子变量的多重赋值是原子操作吗?
- 对标准类型使用原子操作
- 共享指针,C 版本的原子操作
- 即使在单线程程序中,共享指针是否在引用计数中使用原子操作
- 原子操作传播/可见性(原子负载与原子RMW负载)
- 为什么原子操作需要独家的缓存访问
- 在英特尔上自然对齐的POD类型的保证原子操作
- C++ 如何编写原子操作
- 原子操作示例'Concurrency in Action'的正确性
- 嵌套原子操作是否保证为原子操作
- 如何实现原子操作
- 如何使用原子操作fetch_or或test_and_set在指针中设置一点,而在C 11中不使用Amberare_
- 指针地址交换总是C++中的原子操作吗
- 何时不使用原子操作