文章

68

粉丝

0

获赞

0

访问

30.4k

头像
2019年计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2025年10月31日 00:24
阅读数 422

ch[n]为n个哲学家的筷子数组;bowl=m;为m个碗;limit=n-1;表示最多由n-1个哲学家争夺筷子

    P{
        //初始化筷子
        for(int i=0;i<n;i++){
            ch[i]=1;
        }
        while(true){
        p(limit);
        p(ch[i]);
        p(ch[(i+1)mod n]);
        v(limit);
        p(bowl);
        //就餐
        v(bowl);
        v(ch[i]);
        v(ch[(i+1)mod n]);
        }
    }

 


评分及理由

(1)信号量定义及初始化部分(满分2分)

得分:1分

理由:学生定义了ch(筷子)和bowl(碗)的信号量,但缺少对limit信号量的明确定义和初始化。标准答案中bowls信号量初值为min(n-1, m),而学生使用了两个独立信号量bowl和limit,这种设计虽然思路正确但不够简洁。扣1分是因为信号量定义不完整且未说明初值含义。

(2)筷子获取与释放逻辑(满分3分)

得分:1分

理由:学生正确实现了筷子的P、V操作顺序,但在获取筷子后立即释放limit信号量,这破坏了资源占有的原子性。标准答案中是在获得碗和筷子后统一进行就餐,而学生在获取筷子后就释放了limit,可能导致死锁。这是严重的逻辑错误,扣2分。

3)碗资源管理(满分2分)

得分:1分

理由:学生正确使用了bowl信号量来管理碗资源,但将碗的获取放在筷子获取之后,这与标准答案顺序不同但逻辑上可行。扣1分是因为碗和筷子的获取顺序安排不够合理,可能影响并发效率。

4)整体结构与死锁预防(满分1分)

得分:0分

理由:学生的方案存在死锁风险,因为在获取筷子后立即释放limit信号量,同时碗的获取在筷子之后,这种设计不能有效防止死锁。标准答案通过限制同时进餐人数为min(n-1, m)来预防死锁,而学生的实现破坏了这一机制。

题目总分:1+1+1+0=3分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发