文章
281
粉丝
40
获赞
2
访问
24.2k
(1)对C1的代码是临界区,因为不同进程对缓冲区B访问需要互斥,同一时刻只有一个进程可以进入缓冲区B
(2)
cobegin{
semaphore mutex = 1;//互斥访问缓冲区B
semaphore buffer_B = 0;//B中可用数据
p_1(){
wait(mutex);
执行C1,往缓冲区中放入数据;
signal(mutex);
sighal(buffer_B);
}
p_2(){
wait(buffer_B);
wait(mutex);
执行C2,从B从读取一个数据;
signal(mutex);
}
}coend;
(3)
cobegin{
semaphore mutex = 1;//对缓冲区B上锁
p_1(){
wait(mutex);
执行C3,修改数据;
signal(mutex);
}
p_2(){
wait(mutex);
执行C3,修改数据;
signal(mutex);
}
}coend;
评分及理由
(1)得分及理由(满分2分)
学生回答正确,指出C1代码是临界区,并正确解释了原因(需要互斥访问缓冲区B)。得2分。
(2)得分及理由(满分3分)
学生定义了mutex和buffer_B两个信号量,数量合理(尽可能少)。mutex初值1正确,用于互斥;buffer_B初值0正确,用于同步(表示数据可用)。代码逻辑正确:P1先获取mutex执行C1,释放mutex后signal(buffer_B);P2先wait(buffer_B)等待数据,再获取mutex执行C2。但存在拼写错误(sighal应为signal),不扣分。得3分。
(3)得分及理由(满分3分)
学生只定义了一个mutex信号量(数量合理),初值1正确,用于互斥访问缓冲区B。代码逻辑正确:P1和P2均通过wait(mutex)和signal(mutex)保护C3操作。得3分。
题目总分:2+3+3=8分
登录后发布评论
暂无评论,来抢沙发