【发布时间】:2017-03-02 16:05:13
【问题描述】:
我们有一个作业来展示哲学家就餐问题的僵局。我们已经编写了所有代码并且代码可以编译,但是在运行代码时,其中一位哲学家最终吃掉了。那么这是否意味着实际上不会发生死锁?
#include <pthread.h>
#include <stdio.h>
#define number_philo 5
pthread_mutex_t cutlery[number_philo];
void* philosopher (void* number)
{
int my_num = *((int*)number);
while (1)
{
printf("\n Philosopher %d is thinking.\n",my_num);
pthread_mutex_lock (&cutlery[my_num]);
printf("\nPhilosopher %d has left cutlery. \n",my_num);
sleep(3);
pthread_mutex_lock (&cutlery[(my_num + 1) % number_philo]);
printf("\nPhilosopher %d has right cutlery. \n",my_num);
printf("\n Philosopher %d eating.\n", my_num);
printf("\n Philosopher %d done.\n", my_num);
pthread_mutex_unlock (&cutlery[(my_num + 1) % number_philo]);
pthread_mutex_unlock (&cutlery[my_num]);
printf("\nPhilosopher %d no longer has cutlery.\n", my_num);
}
return NULL;
}
int main ()
{
int i;
pthread_t phils[number_philo];
void* return_val;
for (i = 0; i < number_philo; i++)
pthread_mutex_init (&cutlery[i], NULL);
for (i = 0; i < number_philo; i++)
pthread_create (&phils[i], NULL, philosopher, &i);
for (i = 0; i < number_philo; i++)
pthread_join (phils[i], &return_val);
return 0;
}
这是输出:output
【问题讨论】:
-
几个小时前你没有问过类似的问题吗?
-
相同的任务,不同的前提
标签: c pthreads posix dining-philosopher