文章
4
粉丝
0
获赞
0
访问
27
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(SAC); // 发送“A完成”的信号,让C可以等待A
wait(SCE); // 等待“C完成”的信号,确保E在C之后执行
E(); // 执行操作E
signal(SEF); // 发送“E完成”的信号,让F可以等待E
wait(SEF); // 等待“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,且作用描述正确(分别对应A-C、B-C、C-D、C-E、E-F的同步关系)。这部分与标准答案一致,但标准答案中简化后只需两个信号量(S_AC和S_CE),而学生使用了完整版本(未简化)。根据题目要求,思路正确不扣分,且信号量定义和初值设置正确,因此得满分2分...
登录后发布评论
暂无评论,来抢沙发