线程同步方法总结
互斥锁、自旋锁、读写锁
互斥锁、自旋锁、读写锁对临界资源的操作流程都是一样的
- 为临界资源加锁,其他线程不可访问
- 访问临界资源
- 访问完成,解锁,其他线程可以访问
如果临界资源是被加锁的,需要等待被解锁。
图片来源:慕课网
条件变量
线程用步较为复杂的方法
- 加锁保护条件变量
- 判断条件是否满足,未满足等待条件满足,等待时线程是睡眠,直到满足被唤醒
- 对临界资源进行操作
- 操作完成后解锁
图片来源:慕课网《编程必备基础》
四种方法的对比
同步方法 | 描述 |
---|---|
互斥锁 | 最简单的线程同步方法,会阻塞线程 |
自旋锁 | 避免切换的线程同步方法,属于忙等待 |
读写锁 | 为多读少写资源设计的线程同步方法,可以高效提升性能 |
条件变量 | 相对复杂的线程同步方法,有更灵活的使用场景 |