Logo
Section 1 / 6

C++11 和 C++14:基础

本课程演示了 C++11 和 C++14 中并发编程的基础知识和总体概览。

导入

C++11 和 C++14:基础

本课程演示了 C++11 和 C++14 中并发编程的基础知识和总体概览。

timeline.png
timeline.png

随着 C++11 标准的发布,C++ 引入了多线程库和内存模型。该库提供了原子变量、线程、锁和条件变量等基本构建模块,这些构成了后续 C++ 标准(如 C++17 和 C++20)建立更高抽象的基础。然而,C++11 本身已经具备任务(task)机制,其抽象层次高于前述的基本构建模块。

大致来说,可以将 C++ 的并发发展划分为三个演进阶段。

## C++11 和 C++14:基础阶段 多线程功能在 C++11 中首次引入。这一支持包含两个部分:一个**明确定义**的内存模型,以及一个标准化的线程接口。C++14 在多线程设施中增加了读写锁。

内存模型

多线程的基础是一个明确定义的内存模型。该模型需要处理以下几个方面:

  • 原子操作:能够不被中断地执行的操作。
  • 操作的部分顺序:某些操作必须保持特定顺序,不能被重排。
  • 操作的可见性:对共享变量的操作在其他线程中何时可见的保证。

C++ 的内存模型受到其前身——Java 内存模型的启发。但与 Java 不同的是,C++ 允许我们打破顺序一致性(sequential consistency)的约束,而顺序一致性正是原子操作的默认行为。顺序一致性提供两个保证:

  1. 程序中的指令按源代码顺序执行。
  2. 所有线程的所有操作存在全局顺序。

内存模型基于原子数据类型上的原子操作(简称“原子”)。

## 原子操作 C++ 提供了一组简单的原子数据类型:布尔值、字符、数值以及多种变体的指针。你可以使用类模板 `std::atomic` 自定义原子数据类型。原子操作建立了同步和顺序约束,这些约束也可以适用于非原子类型。标准化的线程接口是 C++ 并发机制的核心。

简介

C++中的多线程