PV操作每日一题-哲学家进餐问题

383 阅读1分钟

哲学家进餐问题


特别经典的一道题

一、问题描述

📕:
有五个哲学家坐在一圆桌旁,每两位哲学家之间放一支筷子🥢,每个哲学家先思考,然后拿筷子吃饭。为了吃饭每个哲学家必须获得一双筷子,且只从自己左右两边获取筷子。

在这里插入图片描述


二、问题求解

semaphore chopstics[5]= {1,1,1,1,1};
semaphore mutex=1;

Pi()
{
    while(1)
    {
        P(mutex);
        P(chopstics[i]);
        P(chopstics[i+1]%5);
        V(mutex);
        进餐;
        V(chopstics[i]);
        V(chopstics[i+1]%5);
    }
}

三、碎碎念

每个哲学家互斥访问自己左右两边的筷子资源,都申请到才可以吃饭。不然就思考。