1. 桌上有一空盘,允许放一个水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中桔子,女儿专等吃盘中苹果。
规定当盘空时一次只能放一只水果供吃者取用。请用p、v原语实现爸爸、儿子、女儿三个并发进程的同步。
分析:本题中,爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。当盘子为空时,爸爸可将一个水果放入果盘中。
若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入的是苹果,则允许女儿吃,儿子等待。
本题实际是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。
故,应设置三个信号量mutex,s1,s2,其中mutex表示盘子是否为空,初值为1;s1 表示盘中是否有桔子,初值为0;s2表示盘中是否有苹果,初值为0。
同步描述如下:
var mutex,s1,s2:semaphore: =1,0,0; /初始化。
beginparbegin
process father() 爸爸进程。
repeat
wait (mutex);
将水果放入盘中;
if (放入的是桔子) then signal (s1)
else signal(s2);
until false;
endprocess son() 儿子进程。
beginrepeat
wait (s1);
从盘中取出桔子;
signal(mutex);
吃桔子;until false;
endprocess daughter() 女儿进程。
begin
repeat
wait(s2);
从盘中取出苹果;
signal(mutex);
吃苹果;until false
end parend
end2. 在一个小盒子里存放了黑子和白子两种围棋棋子,已知黑子和白子数量皆等于n。试设计两个并发进程a和b,将这些充分混合在一起的棋子分拣开来。
该系统约束条件: (1)a专拣白子;b专拣黑子; (2)每个进程每次只能拣一枚,且拣棋子过程是互斥的; (3)两个拣棋子进程应当交替进行,且拣白子的优先。
分析:本题是两个进程的同步问题,故只需要设计两个信号量s和m控制进程同步即可。
可定义同步信号量s和m的初始值为1和0。算法参考描述如下:
begin
var s,m:semaphore:=1,0;
int i,j:=0,0;
cobegin
process white()
begin
repeat
wait(s);
pick_up();拣一白子。
signal(m);
i:=i+1;
until i=n
endprocess black()
begin
repeat
wait(m);
pick_up();拣一黑子。
signal(s);
j:=j+1;
until j=n
endcoend
end2. 某高校计算机系开设有网络课并安排了上机实习,假设机房共有2m台机器,有2n名学生选该课,规定:(1)每两个学生组成一组,各占一台机器,协同完成上机实习;(2)只有一组两个学生到齐,且此时机房有空闲机器时,该组学生才能进入机房;(3)上机实习由一名教师检查,检查完毕,一组学生同时离开机房。
试用p、v操作模拟上机实习过程。
分析:本题的意图是进程互斥与同步问题。为了保证系统的控制流程,可专门设一个monitor进程,用于控制学生进入机房及计算机的分配使用。本题的设置意图是为了引入后文管程的内容。
上机过程描述如下:
begin
semaphore:student,computer,enter,finish,check;
student:=0;
computer:=2m;
enter:=0;
finish:=0;
check:=0;
cobegin
process procedure student()
beginsignal(student);/表示有学生到达。
wait(computer);/等待获取一台计算机。
wait(enter);/等待进入许可。
do it with partner();上机操作。
signal(finish);/上机完成。
wait(check); 等待老师检查。
signal(computer); 释放计算机资源。
endprocess procedure teacher()
beginl1:
wait(finished);/等待学生实习完成。
wait(finished);/等待另一学生完成。
check the work();检查上机工作。
signal(check);/检查完成。
signal(check); 另一学生的上机检查也已完成。
goto l1; /循环。
endprocess procedure monitor()
begin
l2: wait(student); 等待学生到达。
wait (student); 等待另一学生到达。
signal(enter); 允许学生进入。
signal(enter):/允许学生进入。
goto l2;//循环。
endcoend
end课后题25. 为某临界资源设置一把锁w,当w=1时表示关锁;当w=0时表示锁已打开,试写出开锁和关锁原语,并利用它们去实现互斥。
整型信号量:lock(w): while w=1 do no-op
w:=1;unlock(w): w:=0;
记录型信号量:lock(w): w:=w+1;
if(w>1) then block(
unlock(w): w:=w-1;
if(w>0) then wakeup(
例子:var w:semaphore:=0;
beginrepeat
lock(w);
critical section
unlock(w);
remainder section
until false;end
第二章练习与思考
一 名词解释。1 经常性调查 2 随机原则 3 调查对象 4 调查单位。二 单项选择。1 重点调查中的重点单位是 a 具有典型意义或代表性的单位。b 那些具有反映事物属性差异的品质标志的单位。c 能用以推算总体标志的单位 d 在总体中具有举足轻重的单位。2 普查是为了某种特定的目的而 a 专门组织的...
第二章思考与练习
课程作业 思考与练习 第二章网络操作基本技能。1.学完本章知识,您是否已经学会上网浏览网页?请每周至少登录1次学院的主页 查看与自己密切相关的重要通知和教学安排。答 我已经学会上网浏览网页。2.您有自己的电子信箱吗?如果没有,请上网申请一个免费的电子信箱,用来朋友 同学或老师保持联系。申请成功后给 ...
第二章练习
1在名称为form1的窗体上绘制一个命令按钮,其名称为cmd1,通过属性窗口设置窗体和命令按钮的属性来实现如下功能 1 窗体标题为 设置按钮属性 2 命令按钮的标题为 计算机等级考试 3 命令按钮的标题用三号规格黑体显示 4 程序运行后,命令按钮不显示。2 在窗体form1上画两个命令按钮,其名称分...