操作系统:The Dining Philosophers Problem
哲学家进餐问题
#include
#include
#include
#include pthread_mutex_t chopstick[5]; //5把锁,也就是5根筷子。void*tfn(void *arg)
{int i = (int)arg;int left,right; //左右筷子的编号。if(i == 4){left = 0;right = i;}else{left = i;right = i+1;}while(1){sleep(1); //思考pthread_mutex_lock(&chopstick[left]); //拿到左手的筷子。printf("philosopher %d fetches chopstick %d\n",i,left);if(pthread_mutex_trylock(&chopstick[right]) != 0 )//拿右手的筷子失败{pthread_mutex_unlock(&chopstick[left]); //右手筷子被拿走,放下左手的筷子。continue;}printf("philosopher %d fetches chopstick %d\n",i,right);printf("philosopher %d is eating.\n",i);sleep(2); //吃饭pthread_mutex_unlock(&chopstick[right]); //放下右手的筷子。printf("philosopher %d release chopstick %d\n",i,right);pthread_mutex_unlock(&chopstick[left]); //放下右手的筷子。printf("philosopher %d release chopstick %d\n",i,left);}
}int main()
{pthread_t tid[5]; //5个哲学家int i ;for(i = 0; i < 5; ++i){pthread_mutex_init(&chopstick[i],NULL);pthread_create(&tid[i],NULL,tfn,(void*)i);}for( i = 0; i < 5; ++i){pthread_join(tid[i],NULL);}return 0;
}
运行结果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
