文章

286

粉丝

0

获赞

2

访问

102.9k

头像
2022年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月12日 14:02
阅读数 25

semaphore SAC=0//AC之间同步
semaphore SCE=0//CE之间同步

T1{
    A//执行A 
    V(SAC);//AC同步 
    P(SCE);//C没执行则阻塞 
    E//执行E 
    F //执行F 

T2{
    B//执行B 
    P(SAC);//A没执行则阻塞 
    C//执行C 
    V(SCE);//CE同步 
    D//执行D 
}
 


评分及理由

本题满分8分,学生作答整体思路正确,使用了信号量机制实现了线程间的同步,且同步关系基本符合题目要求。但存在一处细节错误。

(1)信号量定义及初值(满分2分)

学生正确定义了两个信号量SAC和SCE,并给出了初值0,符合标准答案的简化方案。得2分。

(2)同步逻辑描述(满分6分)

学生代码的逻辑结构清晰:
- T1中,A执行后V(SAC),确保了C必须在A之后执行。
- T2中,C执行前P(SAC),确保了C等待A完成;C执行后V(SCE),确保了E必须在C之后执行。
- T1中,E执行前P(SCE),确保了E等待C完成。
- 操作B、D、F的执行顺序在各自线程内是顺序的,且题目未对它们与其他操作(除已约束外)的顺序做要求,因此直接执行是合理的。
扣分点: 学生代码中,T2在执行C之前只等待了信号量SAC(即等待A完成),但根据题目约束,C必须在A和B都完成后才能执行。学生代码中B的执行虽然在线程T2中位于C之前,但由于线程内是顺序执行,B必然在C之前完成,因此从实际执行效果上看,C确实等待了B完成(因为B和C在同一个线程,B先执行)。然而,从严格的同步语义来看,题目要求C等待A和B两个事件,而学生的代码中,信号量SAC只代表了“A完成”这一个事件,并没有显式地表示“B完成...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发