文章
79
粉丝
0
获赞
0
访问
3.4k
semaphore N_full=0, N_empty=N;
P1(){
while(1){ //循环
produce();
P(N_empty);
放入N中某个缓冲区单元;
V(N_full);
}
}
P2(){
while(1){ //循环
P(N_full);
getodd();
countodd();
V(N_empty);
}
}
P3(){
while(1){ //循环
P(N_full);
geteven();
counteven();
V(N_empty);
}
}
}
评分及理由
(1)同步机制设计得分及理由(满分3分)
得分:1分
理由:学生使用了N_full和N_empty两个信号量来实现基本的缓冲区同步,这体现了生产者-消费者模型的基本思路。但存在以下严重问题: - 没有区分奇数和偶数的同步信号量,导致P2和P3无法正确获取对应类型的数据 - P2和P3都会等待同一个N_full信号量,会造成竞争和错误获取数据的问题 - 缺少互斥信号量保护缓冲区的临界区访问
(2)互斥机制设计得分及理由(满分2分)
得分:0分
理由:学生完全没有设计互斥机制。三个进程共享缓冲区,在并发访问缓冲区时会产生竞态条件,但代码中没有任何互斥保护措施(如mutex信号量),这是严重的逻辑错误。
(3)进程逻辑实现得分及理由(满分2分)
得分:0.5分
理由:虽然三个进程的基本框架正确,都使用了循环结构,但存在以下问题: - P1没有根据生成数字的奇偶性向不同消费者发送信号 - P2和P3没有条件判断就直接获取数据,无法保证获取到正确类型的数据 - 缺少对缓冲区的互斥访问保护 - 代码最后有多余的大括号
题目总分:1+0+0.5=1.5分
登录后发布评论
暂无评论,来抢沙发