操作系统经典进程同步问题之生产者-消费者问题
版权声明:原创文章,可以转载 https://blog.csdn.net/qq_43390235/article/details/90645029 操作系统经典进程同步问题之 哲学家进餐问题 哲学家进餐问题 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