文章
408
粉丝
0
获赞
0
访问
106.4k
1):是,临界区是访问临界资源的代码,P1,P2需要互斥执行C1。
2):
semaphore empty=1,full=0;//empty用来指示缓冲区空的个数,full用来指示缓冲区中数据的个数;
p1{
wait(empty); // 等待缓冲区为空
执行C1(写入数据到B);
signal(full); // 标记缓冲区有数据
}
p2{
wait(full); // 等待缓冲区有数据
执行C2(从B中读出数据);
signal(empty); // 标记缓冲区为空
}
3):
semaphore mutex=1,full=1;//mutex用来表述互斥进入缓冲区,full用来指示缓冲区中数据的个数;
p1{
wait(full); // 等待缓冲区有数据
wait(mutex); // 互斥访问缓冲区
执行C3(修改B中的数据);
signal(mutex); // 释放缓冲区访问权
signal(full); // 保持缓冲区有数据状态(C3不改变B的非空性)
}
p2{
wait(full); // 等待缓冲区有数据
wait(mutex); // 互斥访问缓冲区
执行C3(修改B中的数据);
signal(mutex); // 释放缓冲区访问权
signal(full); // 保持缓冲区有数据状态
}
评分及理由
(1)得分及理由(满分2分)
学生回答正确,指出C1是临界区,因为P1和P2需要互斥执行C1。理由充分且与标准答案一致。得2分。
(2)得分及理由(满分3分)
学生使用了两个信号量empty和full,思路正确,但缺少互斥信号量。在P1执行C1和P2执行C2的过程中,虽然empty和full能够实现同步,但缺少对缓冲区的互斥保护。如果多个进程同时访问缓冲区,可能导致数据不一致。因此扣1分。得2分。
(3)得分及理由(满分3分)
学生使用了mutex和full两个信号量,但...
登录后发布评论
暂无评论,来抢沙发