公园相亲问题
某公园举行相亲大会,但要求如下:
(1)每次只能从公园门进入1人(男或女);
(2)-50<=男相亲人数-女相亲人数<=100。
试用P、V操作描述男、女相亲人入园的并发过程。
这个其实和仓库问题是一样的
Semaphore male = 100;
Semaphore female = 50;
//代表还能进入公园的数量
Semaphore mutex = 1;
process_male() {
while(1){
P(male); //男人准备进入
P(mutex);
男人进入;
//男人进入后还能进入公园的男人的数量-1
V(mutex);
V(female); //还能进入女人的数量+1
}
}
process_female() {
while(1){
P(female); //女人准备进入
P(mutex);
女人进入;
//女人进入后还能进入公园的女人的数量-1
V(mutex);
V(male); //还能进入男人的数量+1
}
}
加一个条件
(3)公园最多容纳500个人。(先不考虑出公园)
Semaphore total = 500
Semaphore male = 100;
Semaphore female = 50;
//代表还能进入公园的数量
Semaphore mutex = 1;
process_male() {
while(1){
P(male); //男人准备进入
P(total); //还能进入的人的数量-1
P(mutex);
男人进入;
//男人进入后还能进入公园的男人的数量-1
V(mutex);
V(female); //还能进入女人的数量+1
}
}
process_female() {
while(1){
P(female); //女人准备进入
P(total); //还能进入的人的数量-1
P(mutex);
女人进入;
//女人进入后还能进入公园的女人的数量-1
V(mutex);
V(male); //还能进入男人的数量+1
}
}
条件变一下
(3)公园最多容纳500个人。(考虑相亲后出公园的过程,每次只能运行1人进/出公园)
Semaphore total = 500
Semaphore male = 100;
Semaphore female = 50;
//代表还能进入公园的数量
Semaphore mutex = 1;
process_male_i() {
P(male); //男人准备进入
P(total); //还能进入的人的数量-1
P(mutex);
男人进入;
//男人进入后还能进入公园的男人的数量-1
V(mutex);
V(female); //还能进入女人的数量+1
相亲;
P(mutex);
男人出去;
V(mutex);
V(male);
V(total); //还能进入的人的数量+1
}
process_female_j() {
P(female); //女人准备进入
P(total); //还能进入的人的数量-1
P(mutex);
女人进入;
//女人进入后还能进入公园的女人的数量-1
V(mutex);
V(male); //还能进入男人的数量+1
相亲;
P(mutex);
女人出去;
V(mutex);
V(female);
V(total); //还能进入的人的数量+1
}