文章
281
粉丝
40
获赞
2
访问
23.7k
CoBegin{
semaphore a_done = 0;//操作A完成
semaphore c_done = 0;//操作C完成
T1(){
A执行完成;
signal(a_done);
wait(c_done);
E执行完成;
F执行完成;
}
T2(){
B执行完成;
wait(a_done);
C执行完成;
signal(c_done);
D执行完成;
}
}
CoEnd
评分及理由
(1)得分及理由(满分8分)
学生使用信号量a_done和c_done来实现同步,基本思路正确:a_done用于表示操作A完成(对应A和C的同步),c_done用于表示操作C完成(对应C和E的同步)。但存在以下问题:
但学生代码有一个关键错误:在T1中,E执行前wait(c_done),但T2中C执行后signal(c_done)。这正确实现了C和E的同步。然而,操作E和F之间没有信号量,但由于在同一线程,顺序执行保证E在F前,正确。
总体来看,学生的同步设计正确且简化合理(只使用了两个信号量),与标准答案的简化版本一致。因此得满分8分。
题目总分:8分
登录后发布评论
暂无评论,来抢沙发