欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

操作系统——哲学家进餐问题——2.12

程序员文章站 2022-07-12 20:58:55
...

盘一盘哲学家进餐问题

1.问题描述

五个哲学家,一块在切饭,每个哲学家之间,放了一根筷子,并且每次拿筷子的时候,只能从左边或者右边拿一根。只有同时拿了左右筷子之后才能切饭。
操作系统——哲学家进餐问题——2.12

2.出现的问题&应用场景

问题:在并发的情况下,每个哲学家都拿起了左手边的筷子,就导致了每个哲学家都缺少右手边的筷子,就造成了死锁的情况。
场景:用于解决进程同时持有两个临界资源,干掉死锁的问题

3.解决方案

semaphore chopstick[5] = {1,1,1,1,1}; // 每个筷子的信号量
semaphore mutext = 1; // 互斥取得筷子
Pi(){
	while(1){
		P(mutext);
		P(chostick[i]); // 拿左边
		P(chostick[ (i+1) % 5]); // 拿右边
		V(mutex);
		吃饭
		V(chopstick[i]); // 放左
		V(chopstick[ (i+1) % 5]); // 放右
		发呆
	}
}

mutex信号量,用于每次只有一个哲学家在拿筷子。即使进程发生切换mutex也把其他哲学家给拦住。
在一个哲学家A恰饭的时候,即使另一个哲学家B可以拿筷子了,可是由于A把B需要用到的一只筷子给拿着了,chopstick这个信号量就把B给拦下来了。

相关标签: 操作系统