文章目录
- 线程同步
- 互斥锁(互斥量)
- 相关操作函数
- 应用
- 死锁
- 读写锁
- 相关操作函数
线程同步
临界区——代码
临界数据——共享数据
原子操作:不可以被其他操作打断
必须的,用以保证数据的安全性
实现线程同步的方式:
- 互斥量(互斥锁)——死锁
- 读写锁——多读一写
互斥锁(互斥量)
相关操作函数
不能采用另外的指针对mutex操作。
应用
- 全局区创建互斥量
- 主线程初始化
- 主线程阻塞——连接终止子线程
- 找到操作共享数据的位置(操作位置,不是定义位置)
- 在开始操作前 加锁
- 在操作结束后 解锁
- 主线程释放互斥量
注意:主线程return 0;
对子线程有影响,导致其直接结束了。可以使用pthread_exit(NULL);
终止主线程。
死锁
死锁:因争夺共享资源而造成的一种等待的现象。
死锁场景:(加锁同一组互斥量时,就可能发生死锁)
- 忘记释放锁——可以使用 尝试加锁 不阻塞代码
- 重复加锁
- 多线程多锁,抢占锁资源——一个线程使用多个资源多个锁
读写锁
读写锁效率比互斥锁高,读锁并发执行,不会进行阻塞。
相关操作函数
rwlock
:读写锁
rdlock
:读锁
·wrlock`:写锁