文章

21

粉丝

0

获赞

0

访问

2.0k

头像
2024年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年9月16日 17:53
阅读数 5

1.是,因为需要对缓冲区B进行互斥写

2.

sem empty_b=1;

sem fill_b = 0;

sem lock_b =1;// 理论上由于这里只需要各执行一次,且仅存在P1,P2两个进程,其互斥性已由empty_b和fill_b保证,但一般性的,我们仍然为B加锁

buf B;

void P1(){

wait(empty_b);

wait(lock_b);

C1(B);

signal(lock_b);

signal(fill_b);//若需要执行多次,外面套while即可

}

void P2(){

wait(fill_b);

wait(lock_b);

C2(B);

signal(lock_b);

signal(empty_b);//若需要执行多次,外面套while即可

}

3.

sem lock_b =1;

sem nonempty_b = N;//不为空,N!=0

buf B;

void P1(){

wait(nonempty_b);

wait(lock_b);

C3(B);

signal(lock_b);

signal(nonempty_b);//C3不取出数据,恢复信号量

}

void P2(){

wait(nonempty_b);

wait(lock_b);

C3(B);

signal(lock_b);

signal(nonempty_b);//C3不取出数据,恢复信号量

}


评分及理由

(1)得分及理由(满分2分)

学生回答“是,因为需要对缓冲区B进行互斥写”,正确指出了C1操作需要互斥访问缓冲区B,且理由充分。与标准答案一致。得2分。

(2)得分及理由(满分3分)

学生定义了三个信号量(empty_b、fill_b、lock_b),但题目要求“定义尽可能少的信号量”。实际上,互斥锁lock_b是多余的,因为empty_b和fill_b已经隐含了同步和互斥(在单缓冲区情况下,同步信号量可保证互斥)。标准答案仅使用两个信号量(mutex和full)。学生代码逻辑正确,但多定义了一个不必要的信号量,且未说明信...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发