文章
397
粉丝
40
获赞
2
访问
88.2k
semaphore mutex_t = 1;//铁锹
semaphore empty = 3;//还可以挖多少个坑
semaphore a_done = 0;//有多少个坑需要放树苗
semaphore b_done = 0;//需要浇水的坑数量
CoBegin{
P_1(){
while(1){
p(empty);
p(mutex_t);
挖坑;
v(mutex_t);
v(a_done);
}
}
P_2(){
while(1){
p(a_done);
p(mutex_t);
放树苗;
填土;
v(mutex_t);
v(b_done);
v(empty);
}
}
P_3(){
while(1){
p(b_done);
浇水;
}
}
}Coend
评分及理由
(1)信号量定义及初值(满分2分)
得分:2分
理由:学生定义了四个信号量:mutex_t(互斥使用铁锹,初值1)、empty(可挖坑数量,初值3)、a_done(需要放树苗的坑数量,初值0)、b_done(需要浇水的坑数量,初值0)。这些信号量的定义和初值设置完全正确,与标准答案等效(标准答案中的sk对应empty,empty对应a_done,water对应b_done,mutexT对应mutex_t)。信号量作用描述清晰,初值合理。
(2)甲(P_1)进程同步实现(满分2分)
得分:2分
理由:甲进程先wait(empty)检查可挖坑数量(相当于标准答案的wait(sk)),再wait(mutex_t)获取铁锹互斥权,然后执行挖坑操作,之后signal(mutex_t)释放铁锹,signal(a_done)通知乙有坑需要放树苗(相当于标准答案的signal(empty))。逻辑与标准答案完全一致,且正确实现了同步和互斥关系。
(3)乙(P_2)进程同步实现(满分2分)
得分:2分
理由:乙进程先wait(a_done)等待有坑需要放树苗(相当于标准答案的wait(empty)),再wait(mutex_t)获取铁锹互斥权,然后执行放树苗和填土操作,之后signal(mutex_t)释放铁锹,signal(b_done)通知丙需要浇水(相当于标准答案的signal(water)),同时signal(empt...
登录后发布评论
暂无评论,来抢沙发