在看哲学家就餐的问题,然后自己综合网上的一些内容写了部分伪代码, 希望大家过来看看讨论一下,错误的地方请指正
哲学家就餐问题
防止饿死出现
算法1: 一次性只准4个哲学家就餐,设置信号量number当第五个哲学家想就餐时,进入等待队列
semaphore number=4;
semaphore chopstic[5]={1,1,1,1,1};
void pilosopher(i) //第i个哲学家活动的代码,每个哲学家都从自己的左手边筷子开始,然后拿右手的筷子 i从0开始
{
while(1)
{
thinking;
wait(number);
wait(chopstic;
eatting;
signal(number);
signal(chopstic[(i+1)%5];
signal(chopstic={1,1,1,1,1,};
semaphore mutex=1;
void pilosopher(i)
{
while(1)
{
thinking;
wait (mutex);
wait (chopstic);
signal(mutex);
eating;
signal (chopstic[(i+1)%5]);
signal (chopstic={1,1,1,1,1};
void philosopher(int i)
{
while(1)
{
think();
if(i%2 == 0) //第奇数个哲学家,先左后右。
{
wait (chopstick) ;
eat();
signal (chopstick[(i+1)mod 5]) ;
signal (chopstick) ;
wait (chopstick) ;
signal (chopstick[ i + 1 ] mod 5) ;
}
}