文章
267
粉丝
1101
获赞
1683
访问
136w
Semaphore chopstick={1,1,....1}//n个筷子
Semaphore max=n-1//最多允许n-1个哲学家用餐
Semaphore bowl=min(m,n-1)//碗比人少时,保证每个用餐的哲学家都有碗可用
p(max);
p(chop[i]);//取左筷子
p((chop[i]+1)%n);//取右筷子
p(bow);
用餐;
v(chop[i]);
v((chop[i]+1)%n);
v(bowl);
v(max);
思考;
评分及理由
(1)得分及理由
得分:2分
理由:学生正确使用了信号量来控制碗和筷子的资源,并且限制了最多允许n-1个哲学家同时用餐,符合题目要求。但是代码中存在一些语法错误和逻辑错误,例如信号量的定义和初始化不完整,取右筷子的写法有误(应为(chop[(i+1)%n]),且碗的信号量名称不一致(bowl和bow)。
(2)得分及理由
得分:2分
理由:学生正确地限制了同时用餐的哲学家数量,并且使用了碗和筷子的信号量来控制资源。但是代码中存在逻辑错误,例如取碗的顺序应该在取筷子之前,且信号量的释放顺序也有问题(max应该在最后释放)。
(3)得分及理由
得分:1分
理由:学生没有完全正确地实现哲学家进餐问题的解决方案。代码中存在多个逻辑错误,例如信号量的定义和初始化不完整,取筷子的顺序和释放顺序不正确,且没有考虑到碗的数量限制。
题目总分:2+2+1=5分
登录后发布评论
暂无评论,来抢沙发