版权所有 © 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
,因为对该变量的每个操作都是原子操作:这意味着每个操作都表现得好像它相对于其他操作是严格顺序化的。
原子变量有两个用途:
有关常见模式,请参阅示例部分。