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
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started