操作系统经典进程同步问题之生产者-消费者问题

编程知识 更新时间:2023-04-23 23:24:44

操作系统经典进程同步问题之哲学家进餐问题

哲学家进餐问题
1.问题描述:有五位哲学家,它们的生活方式是交替的进行思考和进餐。哲学家门共用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有五只碗和五根筷子,平时哲学家进行思考,饥饿的时候视图取其左右的靠他最近的筷子,只有当拿到两根筷子时才能进餐。

2.利用记录型信号解决哲学家进餐问题
chopstick:筷子是临界资源所以设置筷子为信号
量,又因为有5只筷子所以定义信号量数组,切互斥所以初始值设置为1,此外哲学家(进程)对筷子的操作相同。

semaphore chopstick[5]={1,1,1,1,1};

do{
wait(chopstick[i]); //使用第i只筷子
wait(chopstick[(i+1)%5]); //使用第i+1只筷子
//eat
signal(chopstick[i]); //释放第i只筷子
signal(chopstick[(i+1)%5]);  //释放第i+1只筷子
//think
...
}while(TRUE);

存在的问题:当哲学家都成功的拿起左边的筷子时都处于“等待”状态,进而发生死锁的问题。
3.解决策略:

1)至多只允许四位哲学系同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用完时释放出他用过的两根筷子。
2)当哲学家的左、右两根筷子均可用时,才允许他拿起筷子进餐。
3)规定奇数号哲学家先拿起他左边的筷子,然后再去拿他右边的筷子;而偶数号则相反。按此规定,总会有一位哲学家能进餐,并在使用完后释放筷子。

4.利用AND信号量机制解决哲学家进餐问题

semaphore chopstick[5] = { 1,1,1,1,1 };
	do {
	
		//think;
		....
		wait(chopstick[(i + 1)%5], chopstick[i]);
		....
		//eat;
		signal(chopstick[(i + 1)%5], chopstick[i]);
	} while (true);

更多推荐

操作系统经典进程同步问题之生产者-消费者问题

本文发布于:2023-04-18 05:19:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/0490c09232687fddcf5285b0ddb39fda.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:生产者   进程   操作系统   消费者   经典

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 85070文章数
  • 14320阅读数
  • 0评论数