文章
4
粉丝
0
获赞
0
访问
22
semaphore SAC = 0; // 标记“操作A是否完成”,供C等待A
semaphore SBC = 0; // 标记“操作B是否完成”,供C等待B
semaphore SCD = 0; // 标记“操作C是否完成”,供D等待C
semaphore SCE = 0; // 标记“操作C是否完成”,供E等待C
semaphore SEF = 0; // 标记“操作E是否完成”,供F等待E
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;
signal(SBC); // 通知“操作B已完成”,让C可以等待B
wait(SAC); // 等待“操作A已完成”(确保C在A之后)
wait(SBC); // 等待“操作B已完成”(确保C在B之后,自己刚signal过,能通过)
执行操作C;
signal(SCD); // 通知“操作C已完成”,让D可以执行
signal(SCE); // 通知“操作C已完成”,让E可以执行
wait(SCD); // 等待“操作C已完成”(自己刚signal过,能通过)
执行操作D;
}
评分及理由
(1)信号量定义部分(满分2分)
学生定义了5个信号量(SAC、SBC、SCD、SCE、SEF),与标准答案中完整版的信号量设置一致,且初值均为0,符合要求。但学生代码中信号量名称与使用不一致(例如定义的是SAC但使用时写成了S_A和S_C),这是命名不一致的错误,但信号量的作用和初值正确。扣1分。
得分:1分(满分2分)
(2)线程T1的同步操作(满分3分)
...
登录后发布评论
暂无评论,来抢沙发