文章

19

粉丝

0

获赞

0

访问

639

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

// 信号量定义
Semaphore mutex = 1; // 互斥访问缓冲区
Semaphore empty = N;   // 空缓冲区单元数
Semaphore full = 0;   // 缓冲区中的数据单元数
Semaphore odd_sem = 0;  // 缓冲区中的奇数个数
Semaphore even_sem = 0; // 缓冲区中的偶数个数

// 共享变量定义
int buffer[N];
int in = 0;
int out = 0;
int odd_count = 0;
int even_count = 0;

// 进程 P1 (生产者)
Process P1 {
    while (true) {
        int data = produce(); // 生产一个正整数

        wait(empty);       // 等待直到有空单元
        wait(mutex);       // 互斥访问缓冲区

        buffer[in] = data; // 将数据放入缓冲区
        in = (in + 1) % N;

        signal(mutex);      // 释放缓冲区互斥锁
        signal(full);      // 增加数据单元数

        if (data % 2 == 0) {
            signal(even_sem); // 如果是偶数,增加偶数计数器
        } else {
            signal(odd_sem);  // 如果是奇数,增加奇数计数器
        }
    }
}

// 进程 P2 (奇数消费者)
Process P2 {
    while (true) {
        wait(odd_sem);   // 等待直到有奇数

        wait(mutex);     // 互斥访问缓冲区
        int data = buffer[out]; //从缓冲区取数据
        out = (out + 1) % N;
        si...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发