第5章 内存模型和原子操作

本章主要内容

  • C++内存模型
  • 标准库中的原子类型
  • 如何使用原子类型
  • 使用原子操作同步线程

C++标准中有一个重要特性常被开发者所忽略,就是多线程(感知)内存模型,内存模型定义了基本部件应该如何工作。那为什么大多数开发者都没有注意到呢?当使用互斥量保护数据和条件变量,或者信号时,对于互斥量为什么能起到这样作用,大多数人并不会关心。只有试图去“接触硬件”,才能详尽的了解到内存模型是如何作用的。

C++是系统级别的编程语言,标准委员会的目标是不需要比C++还要底层的高级语言。C++应该向程序员提供足够的灵活性,无障碍的去做他们想要做的事情。需要时,也可以“接触硬件”。原子类型和原子操作就可以“接触硬件”,并提供底层同步操作,通常会将指令数缩减到1~2个CPU周期。

本章将讨论内存模型的基本知识,再了解原子类型和原子操作,最后了解与原子操作相关的各种同步。这个过程会比较复杂:如果不需要使用原子操作(比如,第7章的无锁数据结构)同步代码,就可以跳过本章。