文章

281

粉丝

40

获赞

2

访问

24.2k

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

(1)对C1的代码是临界区,因为不同进程对缓冲区B访问需要互斥,同一时刻只有一个进程可以进入缓冲区B

(2)

cobegin{

semaphore mutex = 1;//互斥访问缓冲区B

semaphore buffer_B = 0;//B中可用数据

p_1(){

wait(mutex);

执行C1,往缓冲区中放入数据;

sighal(buffer_B);

signal(mutex);

}

p_2(){

wait(buffer_B);

wait(mutex);

执行C2,从B从读取一个数据;

signal(mutex);

}

}coend;

 

(3)

cobegin{

semaphore mutex = 1;//对缓冲区B上锁

p_1(){

p(mutex);

执行C3,修改数据;

v(mutex);

}

 

p_2(){

p(mutex);

执行C3,修改数据;

v(mutex);

}

}coend;


评分及理由

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

学生回答正确,指出C1代码是临界区,并正确解释了原因(不同进程对缓冲区B的访问需要互斥)。答案与标准答案一致。得2分。

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

学生定义了mutex和buffer_B两个信号量,数量合理(尽可能少)。但代码中存在逻辑错误:在P1进程中,执行C1(写入数据)后,应先signal(mutex)再signal(buffer_B),但学生先signal(buffer_B)后signal(mutex),这可能导致P2在获取buffer_B后无法立即获取mutex(因为mutex仍被P1持有),但P2会阻塞在wait(mutex)上,这不会导致死锁或错误,只是效率稍低(标准答案顺序更优)。此外,学生使用了cobegin/coend结构(虽非必要但可接受),信号量初值正确(mutex=1, buffer_B=0)。整体思路正确,同步逻辑基本正确,但顺序有小瑕疵。扣1分。得2分。

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

学生仅定义了一个信号量mutex(数量合理),初值正确(1)。代码使...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发