文章
359
粉丝
0
获赞
2
访问
32.8k
(1)是临界区
(2)semaphore mutex=1 empty=n full=0
P1(){
p(empty)
p(mutex)
执行C1
v(mutex)
v(full)
}
p2(){
p(full)
p(mutex)
执行C2
v(mutex)
v(empty)
}
(3)semaphore mutex=1
p1(){
p(mutex)
执行C3
v(mutex)
}
p2(){
p(mutex)
执行C3
v(mutex)
}
评分及理由
(1)得分及理由(满分2分)
学生回答“是临界区”,但未给出理由。题目要求说明原因,学生仅给出结论,未进行解释。按照评分标准,应扣除部分分数。得1分。
(2)得分及理由(满分3分)
学生定义了三个信号量:mutex=1, empty=n, full=0。代码逻辑基本正确,使用了生产者-消费者模型的标准结构。但存在以下问题:
1. 题目要求“定义尽可能少的信号量”。对于本题场景(缓冲区B仅存放一个数据分组),empty信号量是多余的,因为“B为空”是一个二元状态,可以用一个信号量(如full)来表示。引入empty=n(n未定义)增加了不必要的复杂度,且与题目“B用于存放一个数据分组”的描述不符(这意味着缓冲区容量为1,而非n)。
2. 信号量初始值empty=n存在逻辑错误,因为缓冲区B只能放一个分组,empty应初始化为1(表示一个空位)。学生写empty=n,n未定义,不符合题意。
基于以上逻辑错误,扣除相应分数。但学生同步互斥的思路正确,P1和P2的执行顺序能保证同步(P1先写,P2后读)。得1.5分。
(3)得分及理由(满分3分)
学生定义了一个信号量mutex=1,用于实现P1和P2对C3操作的互斥访问。代码逻辑正确,符合题目“定义尽可能少的信号量”的要求,且能保证对缓冲区B的互斥修改。得3分。
题目总分:1+1.5+3=5.5分
登录后发布评论
暂无评论,来抢沙发