第4章 同步并发操作

本章主要内容

  • 等待事件
  • 带有期望的等待一次性事件
  • 在限定时间内等待
  • 使用同步操作简化代码

上一章中,我们看到各种在线程间保护共享数据的方法。我们不仅想要保护数据,还想对单独的线程进行同步。例如,在第一个线程完成前,可能需要等待另一个线程执行完成。通常情况下,线程会等待一个特定事件发生,或者等待某一条件达成。这可能需要定期检查“任务完成”标识,或将类似的东西放到共享数据中,但这与理想情况差很多。像这种情况就需要在线程中进行同步,C++标准库提供了一些工具可用于同步操作,形式上表现为条件变量(condition variables)和期望值(futures)。并发技术规范(TS)中,为期望值添加了更多的操作,并与新的同步工具锁存器(latches)(轻量级锁资源)和栅栏机制(barriers)一起使用。

本章将讨论如何使用条件变量等待事件,介绍期望,锁存器和栅栏机制,以及如何使用它简化同步操作。