v(full); end coend
解二:
semaphore well=1; // 保证互斥地访问水井的信号量 semaphore vat=1; // 保证互斥地访问水缸的信号量
semaphore empty=10; // 表示水缸中剩余的空间能容纳的水的桶数 semaphore full=0; // 表示水缸中水的桶数
semaphore pail=3; // 保证互斥地访问临界资源水桶的信号量 // 大和尚进程 big_monk(){ while(1){
wait(full); wait(pail); wait(vat);
use pail to get water from vat signal(vat); signal(empty);
drink water in the pail signal(pail); } }
// 小和尚进程 little_monk(){ while(1){
wait(empty);\\ wait(pail); wait(well);
use pail to get water from well signal(well); wait(vat);
pour water to the vat signal(vat); signal(full); signal(pail); } }
(21) 在银行家算法中,若出现下述资源分配情况:
Process Allocation Need Available P0 0 0 3 2 0 0 1 2 1 6 2 2 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6
P3 0 0 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6
试问:
① 该状态是否安全?
② 若进程 P2 提出请求 Request( 1, 2, 2, 2 )后,系统能否将资源分配给它? 解:
现在对该时刻的状态进行安全分析: 由于Available向量为(1,6,2,2),所以Work向量初始化为(1,6,2,2)该时刻的安全性检查表如下: Work A P0 1 P3 1 P4 1 P2 1 P1 2 B 6 6 6 6 9 C 2 5 8 9 D 2 4 6 Need A 0 0 0 B 0 6 6 3 7 C 1 5 5 5 5 D 2 2 6 6 0 Allocation A 0 0 0 1 1 B 0 0 0 3 0 C 3 3 1 5 0 D 2 2 4 4 0 Work+Allocation A 1 1 1 2 3 B 6 6 6 9 9 C 5 8 9 D 4 6 True True Finish 10 True 10 2 14 14 True 14 14 True 14 14 1 如表所示,存在安全序列