OS_PV操作_6.公园相亲问题

公园相亲问题

某公园举行相亲大会,但要求如下:
(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
}

猜你喜欢

转载自blog.csdn.net/qq_39906884/article/details/109876011