编写多进程、线程同步问题总结
注: 多进程时所主要解决的就是进程同步问题。
- 进程同步:
进程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
1.1 进程同步存在的问题:
一、两种形式的制约关系
1. 间接相互制约关系(存在临界资源需要互斥)
2. 直接相互制约关系(进程存在前后执行顺序)
二、产生死锁
1.产生死锁的原因
(1) 竞争资源
(2) 进程间推进顺序非法
2.产生死锁的必要条件
(1) 互斥条件 (不可预防)
(2) 请求和保持条件 (可预防)
(3) 不剥夺条件 (可预防)
(4) 环路等待条件 (可预防)
3.死锁的类型
1 | (1) 嵌套型 (即便一个临界资源 也会发生死锁) |
1.2 解决的方法:
一、数据结构:
信号量:
(实现互斥 例: APUE中的14.3 记录锁 15.8 XSI IPC的信号量)(1) 整型信号量 (2) 记录型信号量 (3) AND 型信号量 (4) 信号量集
二、算法 :
1 实现同步:
(1) 生产者—消费者问题
(2) 哲学家进餐问题
(3) 读者—写者问题
2 解决死锁:
(1) 预防死锁: 破坏产生死锁的必要条件
(2) 避免死锁: 利用算法防止进入不安全状态(银行家算法)
(3) 检测死锁: 产生死锁后采取适当措施
(4) 解除死锁: 产生死锁后撤销挂起某些进程
编写多进程、线程同步问题总结
https://dnsnat.gitee.io/DEVELOP/编写多进程、线程同步问题总结.html