文章
61
粉丝
0
获赞
0
访问
4.3k
semaphore mutex=1,empty=N,full=0,oddnum=0, evennum=0;
int num=0;
p1{
while(true){
p(empty);
p(mutex);
num= produce();
if(num%2==0){
put(num);
v(evennum);
}else{
put(num);
v(oddnum);
}
v(mutex);
}
}
p2{
while(true){
p(oddnum);
p(mutex);
getodd();
countodd();
v(mutex);
}
p3{
while(true){
p(evennum);
p(mutex);
geteven();
counteven();
v(mutex);
}
评分及理由
(1)信号量定义(满分1.5分)
得分:1分
理由:学生定义了mutex(互斥)、empty(空缓冲区计数)、oddnum(奇数同步)和evennum(偶数同步)信号量,基本正确。但缺少了full信号量(或类似机制)来正确控制消费者对缓冲区的访问,因为标准答案中P2和P3需要等待特定信号(odd或even)才能执行,而学生的oddnum和evennum相当于标准答案的odd和even,但full信号量定义多余(实际未在同步逻辑中正确使用),这里扣0.5分。
(2)P1进程实现(满分2分)
得分:1.5分
理由:P1中使用了P(empty)和P(mutex)来保证缓冲区和互斥访问,正确;生成数后...
登录后发布评论
暂无评论,来抢沙发