第18章

  1. 并发性是指程序的一种属性,允许多个任务同时执行或在时间上部分重叠。通常,并发性通过使用多个线程来实现。
  2. C++11 提供了编写并发程序的基本支持:线程、互斥量和条件变量。C++14 和 C++17 增加了一些便捷类和工具,但 C++ 在并发特性上的下一次重大更新是 C++20:在这一版本中,我们引入了多个新的同步原语以及协程。
  3. 同步模式是解决共享数据访问的常用解决方案。通常提供一种机制,以确保对多个线程修改,或在某些线程修改的同时,其他线程可对其数据进行独占访问。
  4. 执行模式是,使用一个或多个线程异步执行某些计算的标准方式。这些模式提供了一种机制,可以启动某些代码的执行,并在无需调用者亲自负责执行过程本身的情况下获取执行结果(程序中的其他实体承担该职责)。
  5. 并发设计最重要的指导原则是模块化;当具体应用于并发时,所以从满足某些行为限制的组件来构建并发软件。其中最重要的限制是线程安全保证:通常,使用线程安全操作的组件来构建并发软件要容易得多。
  6. 为了在并发程序中有用,数据结构或组件都必须提供事务性接口。如果一个操作执行了一个定义明确的完整计算,并使系统处于一个定义明确的状态,那么它就是一个事务。一种简化的判断方式是:如果一个并发程序在锁的保护下执行每个操作,但操作之间没有顺序保证,但系统的状态是否仍能保证定义明确?如果不能,则某些操作应作为一个序列在不释放锁的情况下执行。这个序列本身构成一个事务;而序列中的各个步骤操作本身并不是独立的事务。不应由调用者来负责将这些操作组织成序列;相反,数据结构或组件应提供一个接口,将整个事务作为单个操作来执行。