文章

79

粉丝

0

获赞

0

访问

3.4k

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

semaphore even=0, odd=0, mutex=1, N_empty=N;
P1(){
    while(1){     //循环
        x=produce();
        P(N_empty);
        P(mutex);
        放入N中某个缓冲区单元;
        V(mutex);
        if(x%2==0)    V(even);
        else V(odd);
    }
}


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

}


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

}


评分及理由

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

得分:1分

理由:学生定义了四个信号量even、odd、mutex、N_empty,与标准答案完全一致,信号量含义正确。N_empty对应empty,命名不同但不影响功能。

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

得分:2分

理由:P1进程逻辑完整正确,包含生产数据、申请空单元、申请互斥锁、放入缓冲区、释放互斥锁、根据奇偶性通知相应消费者。添加了while循环在实际应用中更合理。

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

得分:1分

理由:存在逻辑错误。countodd()函数应该在释放互斥锁之后执行,因为统计操作不需要互斥保护,放在互斥区内会降低并发效率。虽然功能上能实现,但设计不合理。

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

得分:1分

理由:存在与P2相同的逻辑错误。counteven()函数应该在释放互斥锁之后执行,放在互斥区内会不必要的延长临界区时间,影响...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发