一、线程同步的几种方法

多线程主要有以下几种同步方法:

  1. 互斥量
  2. 读写锁
  3. 屏障
  4. 条件变量
  5. 信号量
  6. 自旋锁

二、几种同步方式的比较

同步方式优缺点和适用范围
互斥量最简单的锁,使用临界区的方式锁住代码块,最基础的锁,适用于多线程互斥
读写锁有更高的并行性,只会锁住写锁,读锁共享,适用于读远大于写的场景
屏障适用于线程等待,直到多个线程到达同一点时再继续运行,主要用于同步
条件变量允许线程以无竞争的方式等待特定条件的发生,适用于生产者和消费者场景
信号量通过PV变量的方式,多用于生产者和消费者场景,和条件变量类似
自旋锁被锁住时线程处于忙等,适用于锁被持有的时间短,不希望线程把时间花在重新调度上

三、信号量和条件变量的区别

  1. 条件变量需要用到互斥锁,信号量不用
  2. 信号量是基于PV操作,需要多个信号量配合使用
  3. 信号量可以用于线程和进程,条件变量只能用于线程
最后修改:2019 年 12 月 28 日
如果觉得我的文章对你有用,请随意赞赏