哲学家吃饭

来源:互联网 发布:java如何合并两个list 编辑:程序博客网 时间:2024/03/29 21:49
#include <stdio.h>#include <pthread.h>#include <unistd.h>struct chops{    int id;    pthread_mutex_t *left, *right;};void *philosopher(void * arg){    struct chops * p = arg;    while(1){        pthread_mutex_lock(p->left);        printf("%d:left\n",p->id);        pthread_mutex_lock(p->right);        printf("%d:right\n",p->id);        pthread_mutex_unlock(p->right);        pthread_mutex_unlock(p->left);        printf("%d:unlock\n",p->id);    }}#define PMI PTHREAD_MUTEX_INITIALIZERint main(void){    pthread_t id[5];    pthread_mutex_t mutex[5]={PMI,PMI,PMI,PMI,PMI};    struct chops chops[5];    int i;    for(i=0;i<5;i++){        chops[i].id = i;        chops[i].left = &mutex[i];        chops[i].right= &mutex[(i+1)%5];        pthread_create(&id[i] , NULL                        , philosopher, &chops[i]);    }pthread_join(id[0],NULL);return 0;}                                                                

0 0
原创粉丝点击