文章
203
粉丝
40
获赞
1
访问
11.5k
(1)对C1的代码是临界区,因为不同进程对缓冲区B访问需要互斥,同一时刻只有一个进程可以进入缓冲区B
(2)
cobegin{
semaphore mutex = 1;//互斥访问缓冲区B
semaphore empty = 1;//缓存B中还可以放入的数据量
semaphore buffer_B = 0;//B中可用数据
p_1(){
while(1){
wait(mutex);
wait(empty);
执行C1,往缓冲区中放入数据;
sighal(buffer_B);
signal(mutex);
}
}
p_2(){
wait(mutex);
wait(buffer_B);
执行C2,从B从读取一个数据;
signal(empty;)
signal(mutex);
}
}coend;
(3)
cobegin{
semaphore empty = 1;//B中可用数学
semaphore mutex = 1;//对缓冲区B上锁
p_1(){
while(1){
p(mutex);
p(empty);
执行C3,修改数据;
v(empty);
v(mutex);
}
}
p_2(){
while(1){
p(mutex);
p(empty);
执行C3,修改数据;
v(empty);
v(mutex);
}
}
}coend;
评分及理由
(1)得分及理由(满分2分)
学生回答正确,指出C1代码是临界区,因为不同进程对缓冲区B的访问需要互斥,同一时刻只能有一个进程进入缓冲区B。这与标准答案一致,得2分。
(2)得分及理由(满分3分)
学生定义了三个信号量(mutex、empty、buffer_B),但题目要求定义尽可能少的信号量,实际上只需两个信号量(mutex和full)即可。学生代码逻辑存在错误:在P1中,wait(empty)和wait(mutex)的顺序可能导致死锁(如果empty先于mutex,但empty...
登录后发布评论
暂无评论,来抢沙发