博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哲学家进餐问题
阅读量:3967 次
发布时间:2019-05-24

本文共 915 字,大约阅读时间需要 3 分钟。

由荷兰学者提出的哲学家进餐问题(The Dinning Philosophers Problem)是经典的同步问题之一。

有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,该哲学家进餐完毕后,放下左右两只筷子又继续思考。

约束条件

(1)只有拿到两只筷子时,哲学家才能吃饭。

(2)如果筷子已被别人拿走,则必须等别人吃完之后才能拿到筷子。

(3)任一哲学家在自己未拿到两只筷子吃完饭前,不会放下手中已经拿到的筷子。

筷子是,一段时间只允许一位哲学家使用。为了表示互斥,用一个表示一只筷子,五个信号量构成信号量数组。本文中算法用描述伪码算法。算法描述如下:n用五支筷子的信号量构成信号量数组:

Semaphore chopstick[5]={
1,1,1,1,1};p(stick[i]);p(stick[(i+1) % 5]);

进餐;

v(stick[i]);  v(stick[(i+1) % 5]);

思考;

当哲学家饥饿时,总是先去拿他左边的筷子,执行wait(chopstick[I]),成功后,再去拿他右边的筷子,执行wait(chopstick[I+1]%5);成功后便可进餐。进餐毕,先放下他左边的筷子,然后再放下右边的筷子。当五个哲学家同时去取他左边的筷子,每人拿到一只筷子且不释放,即五个哲学家只得无限等待下去,引起。

**解决科学家进餐方案一:**规定奇数号科学家先拿左边的筷子,然后拿右边的筷子。偶数号科学家先拿右边的筷子,然后那左边的筷子。导致0,1科学家竞争1号筷子,2,3科学家竞争3号筷子。四号科学家无人竞争。最后总有一个科学家能获得两只筷子。

**解决科学家进餐方案二:**仅当科学家左右两只筷子都能用的时候,才允许他进餐:

ReentrantLock tryLock()

解决科学家进餐方案三:

至多允许四个哲学家同时去拿左边的筷子,最终保证至少有一个科学家能进餐,并且用完之后释放筷子,从而使更多的哲学家能够拿到筷子。

转载地址:http://aqdki.baihongyu.com/

你可能感兴趣的文章
linux工作队列(转)
查看>>
工作队列的初始化(INIT_WORK的参…
查看>>
sysfs and /proc/bus/usb/device
查看>>
linux工作队列(转)
查看>>
跟我一起写udev规则(译)
查看>>
sysfs and /proc/bus/usb/device
查看>>
跟我一起写udev规则(译)
查看>>
USB和sysfs文件系统
查看>>
USB和sysfs文件系统
查看>>
udev(八):实战:使用udevadm修…
查看>>
android开发环境搭建(for 驱动开发…
查看>>
android开发环境搭建(for 驱动开发…
查看>>
android驱动例子(LED灯控制)
查看>>
为Android内核添加新驱动,并添加…
查看>>
Android编译环境(1) - 编译Native …
查看>>
2011年07月14日
查看>>
android内核源代码获取方法
查看>>
Linux 2.6.36以后file_operations…
查看>>
Linux 2.6.36以后file_operations…
查看>>
怎样写linux下的USB设备驱动程序
查看>>