文章
286
粉丝
0
获赞
2
访问
102.9k
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完成...
登录后发布评论
暂无评论,来抢沙发