文章
169
粉丝
0
获赞
0
访问
8.3k
semaphore empty=10,mutex=1,num;
cobegin
process 顾客i {
p(mutex)
p(empty);
v(mutex);
p(mutex);
从取号机获得一个号码;
v(num);
v(mutex);
等待叫号;
p(mutex);
v(empty);
v(mutex);
获得服务;
}
process 营业员 {
while (TRUE) {
p(num);
叫号;
为顾客服务;
}
}
coend
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了三个信号量:empty=10(表示空闲座位数,正确)、mutex=1(互斥信号量,正确)、num(未赋初值,错误)。缺少关键信号量:用于同步顾客等待叫号和营业员叫号的信号量(如标准答案中的full或service_i),且num未赋初值(应为0)。扣1分。
得分:1分(满分2分)
(2)顾客进程实现(满分3分)
学生代码中:
- 使用P(mutex)和P(empty)保护座位资源,但顺序错误(应先P(empty)再P(mutex),否则可能死锁)。扣0.5分。
- 取号机部分:使用P(mutex)保护取号机(正确),但未专门定义取号机互斥信号量(标准答案中为machine),这里用mutex代替可能与其他互斥操作冲突(逻辑错误)。扣1分。
- 缺少对座位计数的同步操作(如V(full)),导致营业员无法感知有顾客等待。扣1分。
- 等待叫号部分:错误使用P(mute...
登录后发布评论
暂无评论,来抢沙发