文章
87
粉丝
0
获赞
1
访问
17.2k
(1)为临界区,因为要求B为空时才能执行C1,意味着,P1,P2对B中生产操作必须互斥,由于缓冲区B仅存放一个数据分组,一旦有一个进程生产后B就不为空
(2)
Semaphore emptyB=1;缓冲区B是否为空
Semaphore getNum=0;//判断数据是否已被取走
进程P1:
{
wait(emptyB);
C1;
signal(getNum);
}
进程P2:
{
wait(getNum);
C2;
signal(emptyB);
}
(3)
Semaphore changeBuf=1;//修改锁
进程P1:
{
wait(changeBuf);
C3;
signal(changeBuf);
}
进程P2:
{
wait(emptyBuf);
C3;
signal(changeBuf);
}
评分及理由
(1)得分及理由(满分2分)
得分:2分
理由:学生正确回答了实现C1的代码是临界区,并给出了合理的解释,即P1和P2对B的生产操作必须互斥,因为缓冲区B只能存放一个数据分组。这与标准答案一致。
(2)得分及理由(满分3分)
得分:3分
理由:学生定义了正确的信号量(emptyB和getNum),并正确使用了wait和signal操作来描述进程P1和P2之间的同步关系。虽然信号量的命名与标准答案不同,但逻辑上是正确的,且满足了题目要求。
(3)得分及理由(满分3分)
得分:2分
理由:学生定义了正确的信号量(changeBuf),但在进程P2的代码中错误地使用了wait(emptyBuf)而不是wait(changeBuf),这是一个逻辑错误。因此扣1分。
题目总分:2+3+2=7分
登录后发布评论
暂无评论,来抢沙发