文章

122

粉丝

1

获赞

100

访问

29.9k

头像
2009年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年11月8日 17:40
阅读数 44

P₁进程:
while(1){
    //生成一个正整数
    Put();
    P(rest); //消耗一个缓冲空位
    P(mutex); //访问缓冲区,加锁
    //放入缓冲区
    V(mutex);//释放缓冲区
    V(full);
}
P₂进程:
while(1){
    P(full); //缓冲区非空,减1
    P(mutex);//访问缓冲区,加锁
    //从缓冲区取数
    get_odd();
    V(mutex);//释放缓冲区
    V(rest);
    //统计奇数
    count_odd++;
}
P₃进程:
while(1){
    P(full);
    P(mutex);//访问缓冲区,加锁
    //从缓冲区取数
    get_even();
    V(mutex);//释放缓冲区
    V(rest);
    //统计偶数
    count_even++;
}

semaphore mutex = 1; //互斥信号量,互斥访问缓冲区
semaphore full = 0; //缓冲区装满值,初始为空则为0
semaphore rest = N; //缓冲区剩余空位,初始为N

 


评分及理由

(1)信号量定义得分及理由(满分2分)

得分:1分

理由:学生定义了mutex、full、rest三个信号量,其中mutex用于互斥正确,rest(对应empty)和full用于同步基本正确。但缺少区分奇偶数的同步信号量odd和even,这是题目要求的核心同步机制,扣1分。

(2)P1进程实现得分及理由(满分2分)

得分:0分

理由:P1进程存在严重逻辑错误:①先执行Put()后执行P(rest),这会导致在没有空位时也能放入数据;②缺少对生成数的奇偶性判断;③缺少对应的V(odd)或V(even)操作。这些都属于基本逻辑错误。

(3)P2/P3进程实现得分及理由(满分3分)

得分:1分

理由:P2和P3进程的互斥控制和缓冲区操作框架基本正确(得1分),但存在以下问题:①缺少对奇偶数类型的判断机制,P2和P3都可能取到错误类型的数据;②缺少对应的P(odd)和P(ev...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发