文章
4
粉丝
0
获赞
0
访问
21
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计数已增加...
登录后发布评论
暂无评论,来抢沙发