也可以引发的死锁。(9)发生死锁的四个必要条件是什么?发生死锁的四个必要条件是:互斥条件,不可抢占条件,占有且申请条件,循环等待条件。(10)一般解决死锁的方法有哪三种?一般解决死锁的方法有:死锁的预防、死锁的避免、死锁的检测与恢复。3.思考题
(1)是否所有的共享资源都是临界资源?为什么?
不是所有的共享资源都是临界资源。因为临界资源是一次仅允许一个进程使用的资源,而系统中有很多资源可以让多个进程同时使用,例如硬盘、正文段等。
(2)系统中只有一台打印机,有三个用户的程序在执行过程中都要使用打印机输出
计算结果。设每个用户程序对应一个进程。问:这三个进程间有什么样的制约关系?试用P、
V操作写出这些进程使用打印机的算法。
因为打印机是一种临界资源,所以这三个进程只能互斥使用这台打印机,即一个用户
的计算结果打印完之后,另一个用户再打印。
设三个进程分别为A、B和C。
设一个互斥信号量mutex,其初值为1。
进程A
进程B
进程C
Pmutex使用打印机Vmutex
Pmutex使用打印机Vmutex
Pmutex使用打印机Vmutex
(3)判断下列同步问题的算法是否正确?若有错,请指出错误原因并予以改正。
①设A,B两个进程共用一个缓冲区Q,A向Q写入信息,B从Q读出信息,算法框图如图324所示。
②设A,B为两个并发进程,它们共享一个临界资源。其运行临界区的算法框图如图325所示。
3
f图324进程AB的算法框图
图325两个并发进程临界区的算法框图
①这个算法不对。因为A、B两个进程共用一个缓冲区Q,如果A先运行,且信息数量
足够多,那么缓冲区Q中的信息就会发生后面的冲掉前面的,造成信息丢失,B就不能从Q
中读出完整的信息。
改正:
A、B两进程要同步使用缓冲区Q。为此,设立两个信号量:
empty表示缓冲区Q为空,初值为1;
full表示缓冲区Q为满,初值为0。
算法框图如图1所示。
②这个算法不对。因为A、B两个进程是并发的,它们共享一个临界资源,所以二者
应互斥地使用该临界资源,在进入临界区时不存在先A后B的时序关系,而是哪个进程先到
一步就先进入自己的临界区。
改正:
A、B两个进程应互斥地进入临界区。为此,设立一个信号量:互斥信号量mutex,其初
值为1。
算法框图如图2所示。
A进程
B进程
A进程
B进程
Pempty向Q写入信息
Vfull
Pfull从Q中读出信息
Vempty
图1
Pmutex临界区代码CSa
Vmutex
Pmutex临界区代码CSb
Vmutex
图2
(4)设有一台计算机,有两条IO通道,分别接一台卡片输入机和一台打印机。卡片r