编写多进程、线程同步问题总结

注: 多进程时所主要解决的就是进程同步问题。

  1. 进程同步:
    进程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

1.1 进程同步存在的问题:

一、两种形式的制约关系
1. 间接相互制约关系(存在临界资源需要互斥)
2. 直接相互制约关系(进程存在前后执行顺序)

二、产生死锁

1.产生死锁的原因

  (1) 竞争资源  
  (2) 进程间推进顺序非法

2.产生死锁的必要条件

(1)	互斥条件			(不可预防)
(2)	请求和保持条件		(可预防)
(3)	不剥夺条件		   (可预防)
(4)	环路等待条件		 (可预防)

3.死锁的类型

1
2
3
(1)	嵌套型 (即便一个临界资源 也会发生死锁)
(2) AB-BA
(3) 有待完善!

1.2 解决的方法:

一、数据结构:

  1. 信号量:
    (实现互斥 例: 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
作者
dnsnat
发布于
2022年3月22日
许可协议