文章
120
粉丝
0
获赞
0
访问
14.8k
semaphore c_mutex=1; //互斥访问C
semaphore a_finish=0;//A是否完成
semaphore b_finish=0//B是否完成
semaphore d_finish=0;//D是否完成
semaphore e_finish=0;//E是否完成
T1(){
执行A;
signal(a_finish);
wait(b_finish);
wait(c_mutex);
执行C;
signal(c_mutex);
执行E;
signal(e_finish);
执行F;
}
T2(){
执行B;
signal (b_finish);
wait(a_finish);
wait(c_mutex);
执行C;
signal(c);
wait(e_finish);
执行D;
}
评分及理由
(1)信号量定义部分:得分2分(满分2分)
学生定义了多个信号量(a_finish、b_finish、e_finish等),这些信号量的初值设置正确(0),并且命名能够反映其作用(如a_finish表示A完成)。但c_mutex信号量用于互斥是不必要的,因为C操作只需要在A和B完成后执行,不需要互斥访问。不过这部分没有逻辑错误,只是多了一个信号量,因此不扣分。
(2)线程T1代码部分:得分1分(满分3分)
学生在线程T1中执行A、C、E、F,但C操作本应由T2执行(题目中T2执行B、C、D),这里T1错误地执行了C操作,属于逻辑错误(线程分工错误)。另外,T1中wait(b_finish)和wait(c_mutex)的用法不正确:b_finish信号量本应用于通知B完成,但这里T1等待b_finish没有意义(因为B由T2执行);c_mutex用于互斥也不必要。E操作完成后signal(e_finish)正确,但F操作缺少对E完成的等待(应wait(e_finish))。扣分理由:线程分工错误(-1分),不必要的互斥信号量使用(-0.5分),F操作缺少同步(-0.5分)。
(3)线程T2代码部分:得分1分(满分3分)
学生在线程T2中执行B、...
登录后发布评论
暂无评论,来抢沙发