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

被折叠的 条评论
为什么被折叠?



