文章

36

粉丝

0

获赞

0

访问

3.7k

头像
2009年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年9月18日 11:46
阅读数 102

// 定义信号量:
// mutex: 互斥信号量,保证对缓冲区的互斥访问,初始值为1
// empty: 表示缓冲区空单元数量,初始值为N
// odd:  表示缓冲区中奇数数量,初始值为0
// even: 表示缓冲区中偶数数量,初始值为0
semaphore mutex = 1, empty = N, odd = 0, even = 0;

P1() {
    while(1) {
        x = produce();          // 生成一个正整数
        P(empty);               // 申请一个空缓冲区单元(若无空单元则阻塞)
        P(mutex);               // 申请进入临界区(互斥访问缓冲区)
        put();                  // 将x放入缓冲区
        V(mutex);               // 离开临界区
        if (x % 2 == 1)         // 若x为奇数
            V(odd);             // 释放一个奇数资源(通知P2)
        else                    // 若x为偶数
            V(even);            // 释放一个偶数资源(通知P3)
    }
}

P2() {
    while(1) {
        P(odd);                 // 申请一个奇数资源(若无奇数则阻塞)
        P(mutex);               // 申请进入临界区
        getodd();               // 从缓冲区取出一个奇数
        V(mutex);               // 离开临界区
        V(empty);               // 释放一个空缓冲区单元
        countodd();             // 统计奇数个数
    }
}

P3() {
    while(1) {
        P(even...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发