文章

4

粉丝

0

获赞

0

访问

20

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

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(SAC);            // 等待“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,与标准答案中完整版信号量定义一致(包括跨线程和非跨线程的同步关系)。信号量命名和初值正确,但标准答案中简化版只需2个信号量(S_AC和S_CE),学生未简化,但题目未要求简化,因此不扣分。得2分。

(2)线程T1代码部分(满分3分)

学生代码中存在逻辑错误...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发