Boost C++ 库

这是世界上备受推崇、设计精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu,《C++ Coding Standards

第 1 章 Boost.Atomic - Boost C++ 函数库
Next

第 1 章 Boost.Atomic

Helge Bahmann

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,因为对该变量的每个操作都是原子操作:这意味着每个操作都表现得好像它相对于其他操作是严格顺序化的。

原子变量有两个用途:

  • 作为通过自定义协调协议协调多个线程的一种方式
  • 作为访问简单变量的“锁定”访问的更快速的替代方案

有关常见模式,请参阅示例部分。


Next