文章
327
粉丝
40
获赞
2
访问
40.2k
CoBegin{
semaphore a_done = 0;//操作A完成
semaphore c_done = 0;//操作C完成
semaphore e_done = 0;//操作E完成
T1(){
A执行完成;
signal(a_done);
wait(c_done);
E执行完成;
signal(e_done);
F执行完成;
}
T2(){
B执行完成;
wait(a_done);
C执行完成;
signal(c_done);
wait(e_done);
D执行完成;
}
}
CoEnd
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了三个信号量a_done、c_done、e_done,初值均为0,符合同步需求。但标准答案中需要更精细的信号量控制(如A->C和C->E的独立控制),学生简化版本可能覆盖主要约束,但未完全匹配标准拓扑关系。扣1分,因为信号量数量不足可能导致同步关系描述不精确。
得分:1分
(2)T1线程同步操作(满分3分)
T1中:A执行后signal(a_done)正确;但wait(c_done)在E之前正确等待C完成;E执行后signal(e_done)用于通知D,但F操作未等待E完成(学生代码中F直接执行,未等待e_done),这里遗漏了E->F的同步约束。扣1分,因为F应在E完成后执行,但未用信号量保证。
得分:2分
(3)T2线程同步操作(满分3分)
T2中:B执行后无信号操作(正确,因B无依赖);wait(a_done)等待A完成(正确);C执行后signal(c_done)通知E(正确);但wait(e_done)在D之前等待E完成(错误,因为D应在C完成后立即执行,无需等待E)。根据约束,D只依赖C完成,不依赖E,学生代码错误添加了D对E的依赖。扣2分,因为逻辑错误导致D执行顺序违反题目约束。
得分:1分
题目总分:1+2+1=4分
登录后发布评论
暂无评论,来抢沙发