文章

27

粉丝

12

获赞

0

访问

872

头像
2011年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年8月8日 22:32
阅读数 42

semaphore mutex = 1; // 取号机互斥 semaphore empty = 10; // 空座位数 semaphore full = 0; // 等待服务的顾客数 semaphore queue_mutex = 1; // 等待队列的互斥(入队/出队操作) cobegin process 顾客i { P(empty); // ① 申请空座位:无空座位则阻塞,有空则占用(empty减1) P(mutex); // ② 申请取号机:互斥访问取号机 从取号机获得一个号码; V(mutex); // ③ 释放取号机:允许其他顾客取号 P(queue_mutex); // ④ 申请队列互斥:准备加入等待队列 将自己加入等待队列; // (逻辑操作,需互斥保护队列) V(queue_mutex); // ⑤ 释放队列互斥 V(full); // ⑥ 通知营业员:等待服务的顾客数加1 等待叫号; // (在队列中等待,由营业员出队触发) 获得服务; } process 营业员 { while (TRUE) { P(full); // ① 等待顾客:无等待顾客则阻塞,有则继续(full减1) P(queue_mutex); // ② 申请队列互斥:准备取出顾客 从等待队列中取出一个顾客(叫号); V(queue_mutex); // ③ 释放队列互斥 为顾客服务; V(empty); // ④ 释放座位:服务完成,空座位数加1 } } coend


评分及理由

(1)信号量定义及初值(满分2分)

得分:2分

理由:学生正确定义了所有必要的信号量(mutex、empty、full、queue_mutex),并赋予了合理的初值。与标准答案相比,虽然命名略有不同(如queue_mutex代替了mutex),但功能完全一致,符合题目要求。

(2)顾客进程实现(满分3分)

得分:3分

理由:顾客进程的逻辑完全正确,包括:申请空座位(P(empty))、互斥访问取号机(P(mutex)/V(mutex))、加入等待队列(P(queue_mutex)/V(queue_mutex))、通知营业员(V(full))以及等待叫号的逻辑。虽然未显式实现"等待叫号"的同步信号量(如标准答案的service_i),但通过队列操作隐式实现了同步,思路正确且功能等价。

(3)营业...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发