#define left(phi_id) (phi_id+N-1)%N
#define right(phi_id) (phi_id+1)%NN= 5
5支筷子对应5个互斥锁,所以:
pthread_mutex_t forks[N]={PTHREAD_MUTEX_INITIALIZER};
哲学家线程需要执行的动作是:
void take_forks(intid){//获取左右两边的筷子
printf("Pil[%d], left[%d], right[%d]\n", id, left(id), right(id));
pthread_mutex_lock(&forks[left(id)]);
pthread_mutex_lock(&forks[right(id)]);//printf("philosopher[%d] take_forks...\n", id);
}void put_down_forks(intid){
printf("philosopher[%d] is put_down_forks...\n", id);
pthread_mutex_unlock(&forks[left(id)]);
pthread_mutex_unlock(&forks[right(id)]);
}void* philosopher_work(void *arg){int id = *(int*)arg;
printf("philosopher init [%d] \n", id);while(1){
thinking(id);
take_forks(id);
eating(id);
put_dow