Question: Dining Philosophers problem is a famous problem in OS. A deadlock may happen when all philosophers want to start eating at the same time and
Dining Philosophers problem is a famous problem in OS. A deadlock may happen when all philosophers
want to start eating at the same time and pick up one chopstick and wait for the other chopstick. We can
use semaphores to simulate the availability of chopsticks.
1.Use an asymmetric solution: an odd-numbered philosopher picks up first the left chopstick and
then the right chopstick. Even-numbered philosopher picks up first the right chopstick and then
the left chopstick.
Based on the program, please implement the above solution to prevent the deadlock.
#include
#include
#include
#define N 5 //the number of philosophers
sem_t S[N]; //semaphores for chopsticks
void * philospher(void *num);
void take_chopsticks(int);
void put_chopsticks(int);
int phil_num[N]={0,1,2,3,4}; //philosopher ID
int main()
{
int i;
pthread_t thread_id[N];
for(i=0;i sem_init(&S[i],0,1); for(i=0;i pthread_create(&thread_id[i],NULL,philospher,&phil_num[i]); for(i=0;i pthread_join(thread_id[i],NULL); }void *philospher(void *num) { while(1) { int *i = num; take_chopsticks(*i); put_chopsticks(*i); } } void take_chopsticks(int ph_num) { printf("Philosopher %d is Hungry ",ph_num); sem_wait(&S[ph_num]); //take the left chopstick printf("Philosopher %d takes chopstick %d ",ph_num, ph_num); sleep(1); sem_wait (&S[(ph_num+1)%N]); //take the right chopstick printf("Philosopher %d takes chopstick %d ",ph_num,(ph_num+1)%N); printf("Philosopher %d is eating ",ph_num); sleep(1); } void put_chopsticks(int ph_num) { sem_post (&S[ph_num]); //put the left chopstick printf("Philosopher %d putting chopstick %d ",ph_num, ph_num); sleep(1); sem_post (&S[(ph_num+1)%N]); //put the right chopstick printf("Philosopher %d putting chopstick %d ",ph_num,(ph_num+1)%N); printf("Philosopher %d is thinking ",ph_num); sleep(1); }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
