文章

6

粉丝

0

获赞

0

访问

155

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

semaphore mutex = 1;
semaphore odd_count = 0;
semaphore even_count = 0;
void P1() {
    while (true) {
        int item = produce();
        wait(mutex);
        put(item);
        if (item % 2 == 0) {
            signal(even_count);
        } else {
            signal(odd_count);
        }
        signal(mutex);
    }
}
void P2() {
    while (true) {
        wait(odd_count);
        wait(mutex);
        int item = getodd();
        countodd(item);
        signal(mutex);
    }
}
void P3() {
    while (true) {
        wait(even_count);
        wait(mutex);
        int item = geteven();
        counteven(item);
        signal(mutex);
    }
}
void wait(semaphore s) {}
void signal(semaphore s) {}

 


评分及理由

(1)信号量定义(满分2分)

得分:1分

理由:学生定义了mutex、odd_count和even_count三个信号量,其中mutex用于互斥,odd_count和even_count分别用于奇数和偶数的同步,这与标准答案中的odd和even类似。但是,缺少了empty信号量来控制缓冲区的空单元数量,这是一个重要的同步信号量,用于防止缓冲区溢出。因此扣1分。

(2)P1进程实现(满分2分)

得分:1分

理由:P1进程中,学生使用了mutex来保护缓冲区的互斥访问,并根据生...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发