文章
47
粉丝
0
获赞
0
访问
1.7k
seamphore odd_empty = 0 ;//奇数个数,初值0
seamphore even_empty = 0; //偶数个数
seamphore mutex = 1; // 互斥访问缓冲区
seamphore full = N; //缓冲区单元个数
process p1{
p(full); //判断该缓冲区是否已满
p(mutex); //互斥使用缓冲区
num = produce();
put()
v(mutex)
}
process p2{
p(full); //判断该缓冲区是否存在正整数
p(mutex);
getodd();
countodd();
v(mutex)
v(full)
}
process P3{
p(full);
p(mutex);
geteven();
counteven();
v(mutex);
v(full);
}
评分及理由
(1)信号量定义(满分2分)
得分:1分
理由:学生定义了mutex和full信号量,但缺少odd和even信号量来控制P1与P2、P1与P3之间的同步。信号量命名也存在拼写错误(seamphore应为semaphore)。
(2)P1进程实现(满分2分)
得分:1分
理由:P1进程基本实现了缓冲区的互斥访问和空单元判断,但缺少对奇偶数的判断和对应的信号量释放(V(odd)或V(even)),导致同步逻辑不完整。
(3)P2进程实现(满分1.5分)
得分:0.5分
理由:P2进程实现了缓冲区的互斥访问,但缺少对奇数信号的等待(P(odd)),且错误地使用了full信号量来判断缓冲区是否存在正整数,逻辑错误。
(4)P3进程实现(满分1.5分)
得分:0.5分
理由:P3进程实现了缓冲区的互斥访问,但缺少对偶数信号的等待(P(even)),且错误地使用了full信号量来判断缓冲区是否存在正整数,逻辑错误。
题目总分:1+1+0.5+0.5=3分
登录后发布评论
暂无评论,来抢沙发