当前位置:首页 > 操作系统大题
1.分拣黑、白棋子
相等数量的黑、白棋子混装在一个盒子里,pa拣黑子, pb拣白子;每次只能拣一个; 1) pa,pb 不分次序。
semaphore sa=1,sb=0; 2) pa先开始,轮流分拣。 Process pa semaphore mutex=1; Process pb Process pb { Process pa { { while(有白子) while(有黑子) { while(有黑子) { wait(mutex); while(有白子) { wait(sa); { wait(mutex); { wait(sb); 拣白子; 拣黑子; 拣黑子; signal(mutex); 拣白子; signal(sb); signal(mutex); } signal(sa); } } } } } } } 2.图书馆阅览室.图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程? Reader{ 1)当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞) wait(mutex); 2)当图书馆中没有座位时,后到的读者不等待,立即回家。 if (count==0) 解(1 )设信号量: { signal(mutex); Reader{ 解(2) semaphore wait(S) semaphore COUNT=100, back; S=100 ,mutex=1; } mutex=1; Reader{ count=count-1; wait(MUTEX) Reader{ 申请读者名额 登记 登记 申请读者名额 互斥登记 signal(mutex); 阅读 阅读 阅读 signal(MUTEX) 释放读者名额 互斥注销 wait(mutex); 阅读 } 释放读者名额 count=count+1; wait(MUTEX) } signal(mutex); 注销 }
(二) 有一座东西方向的独木桥;用P,V操作实现:(1)每次只允许一个人过桥;(2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。 (1)解设信号量 MUTEX=1P (MUTEX) 过桥V (MUTEX)
(2)解semaphore MUTEX=1, (东西方互斥)MD=1, MX=1 (东向西,西向东 计数变量互斥) intCD=0 (东向西的已上桥人数)CX=0 (西向东的已上桥人数)
E_W{ W_E{ wait (MD) wait (MX) IF (CD==0) IF (CX==0) { wait(MUTEX) } { wait(MUTEX) } CD=CD+1 CX=CX+1 signal(MD) signal(MX) 过桥 过桥 wait(MD) wait(MX) CD=CD-1 CX=CX-1 IF (CD=0) IF (CX=0) { signal(MUTEX) } { signal(MUTEX) }
signal (MX) signal (MX)
共分享92篇相关文档