线程同步
- 线程同步其实就是一个等待机制,叫做等待队列
- 多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用
- 防止数据混乱,产生于时间相关的错误
互斥量mutex
- 建议锁,没有强制使用
- 一个线程持有锁会导致其他所有需要此锁的线程挂起
- 在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题
- 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能问题
一般步骤
- 创建锁pthread_mutex_t lock
- 初始化锁pthread_mutex_init
- 加锁pthread_mutex_lock
- 访问共享数据
- 解锁pthread_mutex_unlock()
- 销毁锁pthread_mutexdestroy
注意事项
- 使用共享数据前加锁,使用结束后,立即解锁
- 加锁:–操作
- 解锁:++操作
- 互斥锁本质是结构体,可以看成1
- 锁的粒度越小越好
死锁
- 使用锁不恰当导致的现象
- 线程试图对互斥量进行反复加锁
- 两个线程各自持有一把锁,去请求另外一把锁
读写锁
- 读共享,写独占
- 写锁优先级高
- 锁只有一把