条件变量 II – std::condition_variable

条件变量是多线程同步的一种常用方法, 两个线程同步, 如果一个线程在到达同步点之前可能等待很久, 以至产生的额外开销超过了线程调度的开销, 这种情况就可以使用条件变量来同步, 反之, 如果等待的开销比较小, 就可以使用while(){sleep_1ms()}的方式来完成同步, 类似的思路和内核的spin_lock和mutex的区别一样.

C++ STL 提供了相对完善的并行编程接口, 当然少不了对于条件变量的实现. 和pthread实现相比, 除了接口更加面向对象, 并无明显不同, 毕竟, “条件变量的正确使用方式只有一种”. 使用条件变量, 需要准备三件材料: 1个条件 + 2个变量 + 多个线程.

  • 1个条件: 和所有的并行代码一样, 搞清楚执行流之间何时同步, 如何同步是整个程序的重中之重
  • 2个变量: 1个条件变量 + 1把mutex, 当然, 在不同的语言中这种mutex的实现可以不同, 但其本质并没有改变
  • 多个线程: 条件变量只能用于多线程同步, 不能用于多进程
Continue reading