哲学家就餐问题主流程
2015-12-04 10:44:00 1 举报
哲学家就餐问题是一个经典的并发编程问题。这个问题描述的是五个哲学家围坐在一个餐桌旁,每个哲学家面前都有一只叉子,他们的生活方式是交替进行思考和进餐。当一个哲学家思考时,他需要两只叉子才能进餐;当一个哲学家进餐时,他需要放下手中的叉子。哲学家们的生活是如此简单,以至于他们都不知道该如何正确地进餐。这个问题的关键在于如何避免死锁并确保哲学家们能够和谐地生活在一起。
作者其他创作
大纲/内容
sem_wait(&mutex1);
遍历所有椅子,抢占一把空椅子
sem_wait(&chopsticks[(i+1)%CHOP_NUM]);
print当前哲学家获得叉子2
dining_num++;
sleep(rand()%3);
sem_post(&mutex1);
print桌上现有的哲学家就餐情况
sem_post(&chopsticks[(i+1)%CHOP_NUM]);
print当前哲学家已经离开
结束
sem_wait(&chopsticks[i]);
sem_wait(&chair);
sem_wait(&print_mutex);
dining_num--;
sem_post(&chair);
sem_post(&chopsticks[i]);
sem_post(&print_mutex);
sem_post(&mutex);
print当前哲学家获得叉子1
sem_wait(&mutex);
当前哲学家释放椅子
开始
0 条评论
下一页
为你推荐
查看更多