文章目录
- 进程互斥与同步四原则
- 进程互斥的软件实现方法
-
- 单标志法(空闲让进)
- 双标志先检查法(忙则等待)
- 双标志后检查法(空闲让进、有限等待)
- 皮特森算法(让权等待)
- 小结
- 进程互斥的硬件实现方法
-
- 中断屏蔽方法(适用于单处理机、内核进程)
- TestAndSet 指令(不满足让权等待,适用于多CPU)
- Swap 指令(不满足让权等待、适用于多CPU)
- 小结
- 软硬件方法都不满足“让权等待”
- 信 量机制
-
- 整型信 量(违背让权等待)
- 记录型信 量(满足让权等待)
- 小结
- 如何实现同步与互斥
-
- 实现互斥(信 量初值为1)
- 实现同步(初值为0)
- 前驱关系
- 管程
- 死锁
-
- 死锁检测
- 进程互斥 锁
-
- 互斥锁(存在忙等的问题,不满足让权等待)
- 进程同步 条件变量
-
- 条件变量通常和锁配合着使用,用于实现互斥
进程互斥与同步四原则
进程互斥的软件实现方法
单标志法(空闲让进)
双标志后检查法(空闲让进、有限等待)
进程互斥的硬件实现方法
TestAndSet 指令(不满足让权等待,适用于多CPU)
小结
记录型信 量(满足让权等待)
小结
实现同步(初值为0)
- 引入管程的目的无非就是要更方便地实现进程互斥和同步。
- 这种互斥特性是由编译器负责实现 的,程序员不用关心。
死锁检测
先看分配出去的资源
P1请求分配两个R2资源,而R2资源已经全部分配出去了,一个给了P3,一个给了P2,所以P1进程应该被阻塞。
P2也是同理
能顺利执行得只有P3进程
进程互斥 锁
互斥锁(存在忙等的问题,不满足让权等待)
自旋忙等的过程中没有发生进程切换,所以忙等的代价是很低的
进程同步 条件变量
条件变量通常和锁配合着使用,用于实现互斥
条件变量和信 量:
信 量它有一个初值,这个值表示用信 量表示的资源他有多少个
条件变量是没有初始值的,他只是一个队列而已
初始时,条件变量为空
一个条件变量代表一种阻塞的原因
对信 量的V操作:先让值+1,如果有进程在等待这个信 量,还会唤醒等待的信 量。
这就意味着即便没有任何进程在等待,
我的V操作至少会让值加1
对条件变量的signal操作,如果等待队列的条件变量为空,他不会累加值,也无法唤醒任何一个进程,
所以使用条件变量的时候,wait操作会在signal操作之前
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!