文章

449

粉丝

0

获赞

0

访问

80.1k

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

semaphore empty = N;	//缓冲区可用单元数量
semaphore odd = 0, even = 0; 	//奇数和偶数的数量 
semaphore mutex = 1;	//互斥信号量
p1(){
    int x = product();
    p(empty);
    p(mutex);
    if(x % 2 == 1) v(odd);
    else v(even)
    put(x);
    v(mutex);
}
p2(){
    p(odd);
    p(mutex);
    getodd();
    v(mutex);
    v(empty);
    countodd();
}
p3(){
    p(even);
    p(mutex);
    geteven();
    v(mutex);
    v(empty);
    counteven();
}

 


评分及理由

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

得分:1分。理由:学生正确定义了四个信号量(empty、odd、even、mutex),含义与标准答案一致,完全正确。

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

得分:2分。理由:存在一个逻辑错误。在P1中,学生将V(odd)和V(even)操作放在了put(x)之前,这会导致消费者进程可能在数据还未放入缓冲区时就被唤醒,造成同步错误。正确的顺序应该是先put(x)再根据奇偶性发信号。此外,product()拼写错误应为produce(),但拼写错误不扣分。

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

得分:3分。理由:P2和P3的实现逻辑完全正确,包括信号量的P/V操作顺序、互斥锁的使用以及最后的计数操作,与标准答案一致。

题目总分:1+2+3=6分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发