一、基本概念
进程同步: 同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上 协调 它们的 工作次序 而产生的制约关系。进程间的直接制约关系源于他们之间的合作。
进程互斥: 指当一个进程访问某临界资源时,另一个进程想要访问就必须等待,当前访问 临界资源 的进程访问结束,释放该资源后,另一个进程才能访问临界资源。
二、信号量机制
1. 整型信号量
2. 记录型信号量
三、信号量机制实现进程同步
信号量机制实现前驱关系
四、信号量机制的应用
1. 生产消费和读写者问题
2. 多(类)生产者——多(类)消费者问题
代码实现:
思考:如果不要互斥信号量是否可以满足题目要求?
是可以满足题目要求的,主要是因为盘子的容量是1。如果盘子的容量大于1,就必须使用互斥信号量
m
u
t
e
x
mutex
mutex。
3. 哲学家进餐问题
解决办法:
设置互斥信号量
m
u
t
e
x
mutex
mutex,使得每个哲学家互斥拿起筷子,并且一次拿起两只筷子。
五、管程
1. 管程的组成
2. 管程的基本特征
管程的定义:
管程的调用:
关于管程的总结:
六、死锁(Dead Lock)
1. 定义: 在并发环境下,各进程因竞争资源而造成一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进 的现象。
2. 死锁、饥饿、死循环的区别:
死锁和饥饿不占用处理机,而死循环一定占用处理机。
可以是一个或多个进程饥饿,而死锁只能是多个进程同时死锁。
3. 死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要有一个不成立,就不会发生死锁。
4. 死锁的处理策略
破坏不可剥夺条件
破坏请求和保持条件
破坏循环等待条件
按编号顺序申请,不可逆向或者随意申请
七、银行家算法(避免死锁)
代码实现的数据结构:
八、死锁的检测与解除
此时需要解除死锁