文章
122
粉丝
1
获赞
100
访问
29.9k
P₁进程:
while(1){
//生成一个正整数
Put();
P(rest); //消耗一个缓冲空位
P(mutex); //访问缓冲区,加锁
//放入缓冲区
V(mutex);//释放缓冲区
V(full);
}
P₂进程:
while(1){
P(full); //缓冲区非空,减1
P(mutex);//访问缓冲区,加锁
//从缓冲区取数
get_odd();
V(mutex);//释放缓冲区
V(rest);
//统计奇数
count_odd++;
}
P₃进程:
while(1){
P(full);
P(mutex);//访问缓冲区,加锁
//从缓冲区取数
get_even();
V(mutex);//释放缓冲区
V(rest);
//统计偶数
count_even++;
}
semaphore mutex = 1; //互斥信号量,互斥访问缓冲区
semaphore full = 0; //缓冲区装满值,初始为空则为0
semaphore rest = N; //缓冲区剩余空位,初始为N
评分及理由
(1)信号量定义得分及理由(满分2分)
得分:1分
理由:学生定义了mutex、full、rest三个信号量,其中mutex用于互斥正确,rest(对应empty)和full用于同步基本正确。但缺少区分奇偶数的同步信号量odd和even,这是题目要求的核心同步机制,扣1分。
(2)P1进程实现得分及理由(满分2分)
得分:0分
理由:P1进程存在严重逻辑错误:①先执行Put()后执行P(rest),这会导致在没有空位时也能放入数据;②缺少对生成数的奇偶性判断;③缺少对应的V(odd)或V(even)操作。这些都属于基本逻辑错误。
(3)P2/P3进程实现得分及理由(满分3分)
得分:1分
理由:P2和P3进程的互斥控制和缓冲区操作框架基本正确(得1分),但存在以下问题:①缺少对奇偶数类型的判断机制,P2和P3都可能取到错误类型的数据;②缺少对应的P(odd)和P(ev...
登录后发布评论
暂无评论,来抢沙发