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