有一老师负责管理纸和笔,另有A,B两组学生,A组学生每个都有笔,B组学生每个都有纸,但一个学生只要能得到其他一种材料就可以写信。有一个容量为N的盒子,每个空间可以装一支笔或一张纸。当盒子不满时时老师将随机放一种材料到盒子中。当盒子有学生所需材料时,允许一个学生从盒子中取出自己所需材料。试用信号量和PV操作描述他们的同步关系。
(1)定义信号量 paper表示纸的数量,pencil表示笔的数量,? empty表示空间数,? mutex用于实现多进程之间的互斥操作。则这四个信号paper,pencli,empty,mutex的初值为:
(2)补充填空1,2,3,4
process teacher( ) {
while(true) {
(1)
(2)
放一种材料到盒子里;
if put(paper)
V(paper)
else
V(pencil);
V(mutex);
}
}
process student_i( ) { //A组有笔的同学进程
{
(3) //有笔的同学,期待纸
P(mutex); //进入临界区
拿走材料;
V(empty); //唤醒保管员
V(mutex); //退出临界区
写信;
}
process student_j( ) { //B组有纸的同学进程
{
(4) //有纸的同学,期待笔
P(mutex); //进入临界区
拿走材料
V(manager); //唤醒保管员
V(mutex); //退出临界区
写信;
}
分析题目? 三个进程(有纸的取笔,有笔的拿纸,有空余时放笔或纸)
(1)先看第一小问,定义信号量 paper表示纸的数量,pencil表示笔的数量,? empty表示空间数,? mutex用于实现多进程之间的互斥操作。则这四个信号paper,pencli,empty,mutex的初值为:
这里问的是四个信号量的初值,首先回顾一下什么是信号量,以及信号量与PV操作的关系:
所以这些信号量会在后面与PV操作一起出现,实现并发,空间数empty依据题目可以知道应该是N,而mutex这个信号量的值应为1,因为mutex与PV操作结合,实现并发,比如当前没有进程访问临界资源(并发程序中共享变量所代表的资源,比如说当前纸张的数量,当前所占用的空间数,进程都可以访问,但互斥操作为的就是进程不能同时访问),当前某进程要访问,首先要使用P(mutex),如果mutex是1,则说明可以继续进行,这个操作后mutex-1=0,之后,如果当前A进程正在访问,又有进程想访问资源,由于mutex=0,在实施一个P操作后mutex=-1<0,则后进入的B进程都必须等待,直到当前进程的完成了任务,进行了V操作,使得mutex=1。(上面描述得不严谨,大致是那个意思),paper,pencil=0,因为这些资源要等待老师放到空间里。
paper=0
pencil=0
empty=N
mutex=1
(2)