第3章课后习题+进程同步与通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
装配进程: While(1){
P(full1 ); P(full2 ); P(mutex);
从货架F1,F2各取一个零件; V(mutex); V(emptyF);2 V(emptyF);1 装配零件;
}
2、请用信号量解决以下的“过独木桥”问题:同一方向的行 人可连续过桥,当某一方向有人过桥时(已在桥上),另一方 向的行人必须等待;当某一方向无人过桥时,另一方向的行人 可以过桥。
PA() {
wait(mutexA); if (countA==0) wait(mutex);
countA++; signal(mutexA);
过桥;
wait(mutexA); countA--;
if (countA==0) signal(mutex);
signal(mutexA); }
PB() {
p1(); p2();p3();p4(); }
write p1( ) { P(s1);
存入消息; P(mutex);
cout=0; V(mutex); V(s2);V(s3);V(s4); }
Read p2( ) { P(s2);
读取消息; P(mutex); cout++;
If (cout==3) V(mutex); }
分析:独木桥问题是读者—写者问题的变形。 同一方向的行人可以连续过桥,相当于读者可以同时读。我们可以将
不同方向的行人看做是两类不同的读者,同类读者(行人)可以同时读( 过桥);
但不同类的读者(行人)之间必须互斥地读(过桥)。
只有当A方向的第一个行人要过桥时需检测B方向是否有 人在过桥;
只有当A方向的最后一个行人已过桥时需唤醒B方向等待 过桥的行人;
V(s1);
Read p3( ) {
P(s3);
读取消息;
P(mutex); cout++;
If (cout==3) V(mutex);}
V(s1);
Read p4( ) {
P(s4);
读取消息;
P(mutex); cout++;
If (cout==3) V(mutex);}
V(s1);
1、某制造公司有两个生产部门和一个装配部门,两个生产部 门分别生产笔杆、笔芯两种零件,装配部门的任务是把笔杆 和笔芯组装在一起。两个生产部门每生产一个零件后都要分 别把它们送到装配部门的货架F1、F2上。F1存放笔杆,F2 存放笔芯,F1和F2均可容纳20个零件。装配人员每次从货 架上取一个笔杆和一个笔芯组装成产品。请用P、V操作进行 正确管理,写出伪代码。
S3
S5
E
S6 G
semaphore A,B,C,D,E,F,G=0,0,0,0,0,0,0; P1( ){S1;V(A);V(B);} P2( ){P(A);S2;V(C);} P3( ){P(B);S3;V(D);V(E);} P4( ){P(D);S4;V(F);} P5( ){P(E);S5;V(G);} P6( ){P(C);P(F);P(G);S6;}
答:同步关系;因为一个工序必须在前一个工序完成后才能开始, 他们必须相互协作才能使进程圆满完成。
(4)商品的入库出库。
答:同步关系;因为商品出库可以为入库提供空间。
(5)工人做工与农民种粮。
答:没有制约关系。
4. 设有一个售票大厅,可容纳200人购票。如果厅 内不足200人则允许进入,超过则在厅外等候; 售票员某时只能给一个购票者服务,购票者买完 票后就离开。试问:
(1)购票者之间是同步关系还是互斥关系?
答:互斥关系。只能有一个人获得售票员的服务。
(2)用P、V操作描述购票者的工作过程。
semaphore empty=200; semaphore mutex=1;
void buyer() { P(empty);
P(mutex); 买票; V(mutex); V(empty); }
分析:这是生产者-消费者问题的变形。相当于2个生产者(生产部 门)各生产一种产品提供给同一个消费者(装备部门)的同步问题 。需设置2个不同的full信号量(fullF1和fullF2),初值均为0;生 产部门各自等待的信号是货架有空位,即emptyF1 和emptyF2 , 初值均为20;由于货架是临界资源,需设置互斥信号量mutex,初值 为1。
●1 ●4
● ——
●5 ●6
1.以下进程之间存在相互制约关系吗?若存在,是什么制约关 系?为什么?
(1)几个同学去图书馆借同一本书。
答:互斥关系;因为他们要借同一本书,不可能同时借到,所以互斥。
(2)篮球比赛中两队同学争抢篮板球。
答:互斥关系;因为争抢同一个篮板球,存在互斥关系。
(3)果汁流水线生产中捣碎、消毒、灌装、装箱等各道工序。
生产进程:
While(1){ 生产一个零件u; if(u=零件甲) {
P( emptyF1 ); P( mutex ); 零件送往货架F1;
V( mutex ); V( fullF1 );} else{ P( emptyF2);
P( mutex ); 零件送往货架F2;
V( mutex ); V( fullF2 );} }
wait(mutexB); if (countB==0) wait(mutex);
countB++; signal(mutexB);
过桥;
wait(mutexB); countB--;
if (countB==0) signal(mutex); signal(mutexB); }
Biblioteka Baidu
售票大厅可容纳200
人购票,说明最多允 许200人共享售票大 厅,用信号量empty 表示,初值为200;
售票员一次只能为一 个购票者服务,说明 必须互斥地进行购票 ,用信号量mutex表 示,初值为1。
5. 进程之间的关系如图3-16所示,试用P、V操作描 述它们之间的同步。
A
S2 C
S1 B
S4 F D
6. 有4个进程P1、P2、P3、P4共享一个缓冲区, 进程P1向缓冲区存入消息,进程P2、P3、P4从 缓冲区中取消息,要求发送者必须等三个进程 都取过本消息后才能发送下条消息。缓冲区内 每次只能容纳一个消息,用P、V操作描述四个 进程存取消息的情况。
semaphore s1=1;semaphore s2,s3,s4=0; int cout=0;semaphore mutex=1; void main() {