版权所有 © 2011 Helge Bahmann
版权所有 © 2012 Tim Blechmann
版权所有 © 2013-2025 Andrey Semashev
根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)
目录
Boost.Atomic 是一个库,它提供了 atomic 数据类型和这些数据类型上的操作,以及用于通过原子变量协调多个线程所需的内存排序约束。它实现了 C++11 标准定义的接口,但为缺乏系统/编译器对该特定 C++11 特性支持的平台提供了此功能。
本库的用户应已熟悉并发的一般概念,以及“互斥”等基本概念。
该实现尽可能利用处理器特定指令(通过内联汇编、平台库或编译器内建函数),并在无法利用时回退到通过锁定“模拟”原子操作。
对“普通”变量的操作不保证是原子的。这意味着,初始时 int n=0,两个线程并发执行
void function() { n ++; }
可能会导致 n==1 而不是 2:每个线程会将旧值读入处理器寄存器,对其进行递增,然后将结果写回。因此,两个线程都可能写 1,而不知道另一个线程也在做同样的事情。
相反,声明 atomic<int> n=0,对该变量执行相同操作的结果将始终是 n==2,因为对该变量的每个操作都是原子的:这意味着每个操作的行为都好像相对于其他操作被严格顺序化了。
原子变量可用于两个目的:
请参阅 示例 部分,了解常见模式。