文章
183
粉丝
0
获赞
0
访问
11.2k

评分及理由
(1)得分及理由(满分2分)
学生回答“为临界区,因为P₁和P₂都要执行C₁,要对C₁互斥访问”。该回答正确指出了实现C1的代码是临界区,并给出了基本正确的理由(需要互斥访问)。虽然理由表述不如标准答案详尽(例如未明确提及“共享资源”和“数据不一致”),但核心观点正确。因此,本题得满分2分。
(2)得分及理由(满分3分)
学生回答中定义了信号量`mutex=1`和`empty=0`。其P1和P2的代码逻辑如下:P1先执行“写”操作,然后`signal(empty)`;P2先`wait(empty)`,然后执行“读”操作。
分析:
1. 信号量定义:`mutex`用于互斥,`empty`用于同步(表示缓冲区是否为空),定义正确,初值设置也符合题意(B初始为空,`empty=0`表示空)。
2. 逻辑错误:在学生的代码中,P1的“写”操作(即C1)和P2的“读”操作(即C2)均未使用`mutex`信号量进行保护。这意味着对缓冲区B的写入和读取操作可能同时发生,违反了“B为空时才能执行C1”和“B非空时才能执行C2”的约束,存在数据竞争的风险。标准答案中使用了`mutex`来确保对缓冲区的互斥访问。因此,这是一个关键的逻辑错误。
3. 同步关系:仅通过`empty`信号量实现了“写先于读”的基本同步,这是正确的部分。
扣分:由于存在互斥保护缺失这一严重逻辑错误,无法实现题目要求的正确同步互斥关系。扣除该小题大部分分数。鉴于同步部分思路正确,给予1分。
(3)得分及理由(满分3分)
学生回答中定义了信号量`mutex=1`,并在P1和P2中分别使用`wait(mutex)`和`signal(mutex)`包围“执行C3”的操作。
分析:
1. 信号量定义:正确,仅需一个互斥信号量,初值为1。
2. 代码逻辑:正确使用了互斥锁(`mutex`)来确保任意时刻只有一个进程能执行C3操作(修改缓冲区B中的数据分组),符合“B非空时才能执行C3”以及互斥访问的要求。
3. 与标准答案完全一致。
因此,本题得满分3分。
题目总分:2+1+3=6分
登录后发布评论
暂无评论,来抢沙发