一、基本概念
进程同步: 同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上 协调 它们的 工作次序 而产生的制约关系。进程间的直接制约关系源于他们之间的合作。
进程互斥: 指当一个进程访问某临界资源时,另一个进程想要访问就必须等待,当前访问 临界资源 的进程访问结束,释放该资源后,另一个进程才能访问临界资源。

二、信号量机制
1. 整型信号量

2. 记录型信号量



三、信号量机制实现进程同步

信号量机制实现前驱关系


四、信号量机制的应用
1. 生产消费和读写者问题
2. 多(类)生产者——多(类)消费者问题

代码实现:

思考:如果不要互斥信号量是否可以满足题目要求?

是可以满足题目要求的,主要是因为盘子的容量是1。如果盘子的容量大于1,就必须使用互斥信号量。
3. 哲学家进餐问题

解决办法:

设置互斥信号量,使得每个哲学家互斥拿起筷子,并且一次拿起两只筷子。

五、管程
1. 管程的组成

2. 管程的基本特征

管程的定义:

管程的调用:

关于管程的总结:


六、死锁(Dead Lock)
1. 定义: 在并发环境下,各进程因竞争资源而造成一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进 的现象。
2. 死锁、饥饿、死循环的区别:

死锁和饥饿不占用处理机,而死循环一定占用处理机。
可以是一个或多个进程饥饿,而死锁只能是多个进程同时死锁。
3. 死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要有一个不成立,就不会发生死锁。

4. 死锁的处理策略

破坏不可剥夺条件

破坏请求和保持条件


破坏循环等待条件
按编号顺序申请,不可逆向或者随意申请


七、银行家算法(避免死锁)

代码实现的数据结构:

八、死锁的检测与解除


此时需要解除死锁











