目录
什么是进程同步和进程互斥
进程互斥的软件实现方法
进程互斥的硬件实现方法
互斥锁
信号量机制
用信号量实现进程互斥和同步
生产者消费者问题
多生产者多消费者问题
吸烟者问题
读者写者问题
哲学家进餐问题
管程
死锁
什么是进程同步和进程互斥
进程同步
进程异步是指各并发执行的进程以各自独立的、不可预知的速度向前推进,所以,各进程的代码执行先后顺序等都是不确定的。
但是在有些情况下,我们需要让一个进程的某次执行在另一个进程的某次执行之前或者之后,也就是要求执行是有一定顺序的。这时候,操作系统就提供了进程同步的机制,来保证这种需求。
进程互斥
小结:
进程互斥的软件实现方法
单标志法
该算法有个问题,就是一个进程的访问权只能由另一个进程赋予,那么如果一个能访问临界区的进程就是不访问临界区,那么另外一个等待的进程也无法访问。
双标志先检查法
双标志后检查法
单标志是判断是不是接纳自己,接纳自己我就用,不接纳自己我就不用。
双标志是检查对方是不是要用,对方要用我就不用,对方不用我再用的思想。
Peterson算法
小结:
进程互斥的硬件实现方法
中断屏蔽
TSL
Swap
这些硬件实现,主要是想将检查和上锁这两个过程一气呵成,克服了双标志检查法的缺陷。
小结:
互斥锁
信号量机制
到底什么是信号量呢?
整型信号量
记录型信号量
注意,阻塞之后,再执行,会从原来阻塞的地方开始,而不是再次执行wait函数。
小结:
用信号量实现进程互斥和同步
信号量实现进程互斥
信号量实现进程同步
注意,同步信号量的值,要跟同步资源的数量一致,具体见下方的生产者消费者问题。
其实,不管是互斥信号量还是同步信号量,都是表示对应资源的数量。
信号量实现进程的前驱关系
生产者消费者问题
小结:
多生产者多消费者问题
注意,这里的多个,指的不是同一类型的多个数量,而是多类生产者和多类消费者,每个生产者生产的数据不一样,每个消费者消费的数据也不一样。
问题分析
关键:分析时不能着眼于特定的进程,而是要理清楚事件的先后关系。
这一小节有点复杂,需要反复思考。
吸烟者问题
2.3_9_吸烟者问题_哔哩哔哩_bilibili
读者写者问题
2.3_10_读者写者问题_哔哩哔哩_bilibili
哲学家进餐问题
2.3_11_哲学家进餐问题_哔哩哔哩_bilibili
管程
2.3_12_管程_哔哩哔哩_bilibili
死锁
2.4_1_死锁的概念_哔哩哔哩_bilibili