文章

4

粉丝

0

获赞

0

访问

21

头像
2022年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年8月31日 18:30
阅读数 9


T1(){
A();                  // 执行操作A
signal(S_A);          // 发送“A完成”的信号,让C可以等待A
wait(S_C);            // 等待“C完成”的信号,确保E在C之后执行
E();                  // 执行操作E
signal(S_E);          // 发送“E完成”的信号,让F可以等待E
wait(S_E);            // 等待“E完成”的信号,确保F在E之后执行
F();                  // 执行操作F

}

T2(){
B();                  // 执行操作B
signal(S_B);          // 发送“B完成”的信号,让C可以等待B
wait(S_A);            // 等待“A完成”的信号,确保C在A之后执行
wait(S_B);            // 等待“B完成”的信号,确保C在B之后执行(自己刚发送过,能通过)
C();                  // 执行操作C
signal(S_C);          // 发送“C完成”的信号,让E可以执行
D();                  // C完成后,直接执行D
}

 


评分及理由

(1)信号量定义和初值(满分2分)

学生答案中未明确定义信号量及其初值,但根据代码可推断使用了S_A、S_B、S_C、S_E四个信号量。标准答案中需要明确信号量初值(通常为0),但学生未给出初值,属于不完整。扣1分。

得分:1分

(2)同步逻辑正确性(满分6分)

学生代码整体同步逻辑基本正确:
- T1中A完成后signal(S_A),T2中C前wait(S_A)和wait(S_B),确保C在A和B之后执行。
- T2中C完成后signal(S_C),T1中E前wait(S_C),确保E在C之后执行。
- T1中E完成后signal(S_E),F前wait(S_E),确保F在E之后执行(但此处存在逻辑错误,见下)。
但存在以下问题:
1. T2中wait(S_B)是多余的,因为T2自身刚执行完B并signal(S_B),此时S_B计数已增加...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发