dbegi
waitcS4sig
alfe
dbegi
waitdS5sig
alge
dbegi
waiteS6sig
alhe
dbegi
waitfwaitgwaithS7e
dpare
de
db略23在生产者消费者问题中,如果缺少了sig
alfull或sig
alempty,对执行结果将会有生产者消费者问题中,或,何影响?何影响?如果缺少了sig
alfull,那么表明从第一个生产者进程开始就没有对信号量full值改变,即使缓冲池存放的产品已满了,full的值还是0,但这样消费者进程在执行waitfull时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。如果缺少了sig
alempty,例如在生产者进程向
个缓冲区投满产品后消费者进程才开始从中取产品,这时empty0,full
,那么每当消费者进程取走一个产品时empty并没有被改变,直到缓冲池中的产品都取走了,empty的值也一直是0,即使目前缓冲池有
个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻
f塞。24在生产者消费者问题中,如果将两个wait操作即waitfull和waitmutex互换位置,在生产者消费者问题中,互换位置,和互换位置互换位置,或者将sig
almutex和sig
alfull互换位置,结果会如何?和互换位置结果会如何?在生产者消费者问题中,如果将两个wait操作,waitfull和waitmutex互换位即置后,可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了waitmutex操作并获得成功,则当再执行waitempty操作时,它将因失败而进入阻塞状态,它期待消费者进程执行sig
alempty来唤醒自己,在此之前,它不可能执行sig
almutex操作,从而使试图通过执行waitmutex操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。若sig
almutex和sig
alfull互换位置后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位置。25我们为某临界资源设置一把锁W,当W1时表示关锁;当W0时表示锁已打开,试时表示关锁;时表示锁已打开,,写出开锁和关锁原语,并利用它们去实现互斥。写出开锁和关锁原语,并利用它们去实现互斥。整型信号量:lockWwhileW1do
oopW1u
lockWW0记录型信号量:lockWWW1ifW1the
blockWLu
lockWWW1ifW0the
wakeupWL例子:VarWsemaphore0;begi
repeatlockWcriticalsectio
u
lockWremai
dersectio
u
tilfalsee
d26试修改下面生产者消费者问题解法中的错误:试修改下面生产者消费者问题解法中的错误:消费者问题解法中的错误producerbegi
repeat…r