文章

79

粉丝

0

获赞

0

访问

3.4k

头像
2009年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年10月2日 16:49
阅读数 5

semaphore N_full=0, N_empty=N;
P1(){
    while(1){     //循环
        produce();
        P(N_empty);
        放入N中某个缓冲区单元;
        V(N_full);
    }
}


P2(){
    while(1){     //循环
        P(N_full);
        getodd();
        countodd();
        V(N_empty);
    }

}


P3(){
    while(1){     //循环
        P(N_full);
        geteven();
        counteven();
        V(N_empty);
    }

}

}


评分及理由

(1)同步机制设计得分及理由(满分3分)

得分:1分

理由:学生使用了N_full和N_empty两个信号量来实现基本的缓冲区同步,这体现了生产者-消费者模型的基本思路。但存在以下严重问题: - 没有区分奇数和偶数的同步信号量,导致P2和P3无法正确获取对应类型的数据 - P2和P3都会等待同一个N_full信号量,会造成竞争和错误获取数据的问题 - 缺少互斥信号量保护缓冲区的临界区访问

(2)互斥机制设计得分及理由(满分2分)

得分:0分

理由:学生完全没有设计互斥机制。三个进程共享缓冲区,在并发访问缓冲区时会产生竞态条件,但代码中没有任何互斥保护措施(如mutex信号量),这是严重的逻辑错误。

(3)进程逻辑实现得分及理由(满分2分)

得分:0.5分

理由:虽然三个进程的基本框架正确,都使用了循环结构,但存在以下问题: - P1没有根据生成数字的奇偶性向不同消费者发送信号 - P2和P3没有条件判断就直接获取数据,无法保证获取到正确类型的数据 - 缺少对缓冲区的互斥访问保护 - 代码最后有多余的大括号

题目总分:1+0+0.5=1.5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发