文章

33

粉丝

253

获赞

1

访问

15.6k

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

process P1() {
    while (true) {
        // 1. 生成一个正整数
        int data = produce(); 
        // 2. 申请空单元:无空单元则阻塞
        P(empty); 
        // 3. 申请互斥访问缓冲区:避免与P2/P3同时操作
        P(mutex); 
        // 4. 将数据放入缓冲区的空单元(具体位置需结合缓冲区存储逻辑,如数组+指针)
        put(data); 
        // 5. 释放缓冲区互斥权
        V(mutex); 
        // 6. 根据数据奇偶性,唤醒对应取数进程
        if (data % 2 == 1) {
            V(odd);  // 有新奇数,唤醒P2
        } else {
            V(even); // 有新偶数,唤醒P3
        }
    }
}
取奇数进程 P2(取出奇数并统计)
process P2() {
    while (true) {
        // 1. 申请奇数:无奇数则阻塞
        P(odd); 
        // 2. 申请互斥访问缓冲区
        P(mutex); 
        // 3. 从缓冲区取出一个奇数
        int data = getodd(); 
        // 4. 统计奇数个数
        countodd(); 
        // 5. 释放缓冲区互斥权
        V(mutex); 
        // 6. 释放一个空单元,唤醒P1(缓冲区多一个空位可生产)
        V(empty); 
    }
}
取偶数进程 P3(取出偶数并统计)
process P3() {
    while (true) {
        // 1. 申请偶数:无偶数则阻塞
        P(even); 
        // 2. 申请互斥访问缓冲区
        P(mutex); 
   ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发