2021-08-26
程序员文章站
2022-07-09 22:31:54
...
哲学家进餐问题
(一些想法,不知道对错,我是刚学完,想到了和书上不一样的,感觉没什么问题就写了下来)
semaphore chopstick[5]={1,1,1,1,1}; //初始化信号量
semaphore mutex=1;
Pi(){ //i号哲学家的进程
while(1){
int i = 0; //记录是否拿起筷子
p(mutex)
if(chopstick[i] == 1 && chopstick[(i+1)%5 ==1){
P(chopstick[i]); //拿筷子的条件
P(chopstick[(i+1)%5]);
i++;
}
V(mutex)
if(i == 1){ //吃并且返回筷子
eat;
i=0;
V(chopstick[i]);
V(chopstick[(i+1)%5]);
}
}
推荐阅读