Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Problem 2 : In lecture 7 , we have described the solution to Dining - Philosophers Problem that avoid the deadlock in C . Complete

Problem 2: In lecture 7, we have described the solution to Dining-Philosophers Problem that avoid the deadlock in C. Complete the following code that uses semaphore.
#include
#include
#include
#define N 5
#define THINKING 2
#define HUNGRY 1
#define EATING 0
#define LEFT (phnum +4)% N
#define RIGHT (phnum +1)% N
int state[N];
int phil[N]={0,1,2,3,4};
sem_t mutex;
sem_t S[N];
void test(int phnum){
if (state[phnum]== HUNGRY
&& state[LEFT]!= EATING
&& state[RIGHT]!= EATING){
// state that eating
state[phnum]= EATING;
sleep(2);
printf("Philosopher %d takes fork %d and %d
",
phnum +1, LEFT +1, phnum +1);
printf("Philosopher %d is Eating
", phnum +1);
sem_post(&S[phnum]);
}
}
// take up chopsticks
void take_fork(int phnum){
//TODO: use semaphore wait
// state that hungry
state[phnum]= HUNGRY;
printf("Philosopher %d is Hungry
", phnum +1);
// eat if neighbours are not eating
test(phnum);
//TODO : use semaphore post
// if unable to eat wait to be signalled
sem_wait(&S[phnum]); // Noting to do here
sleep(1);
}
// put down chopsticks
void put_fork(int phnum){
// TODO: use semaphore wait
// state that thinking
state[phnum]= THINKING;
printf("Philosopher %d putting fork %d and %d down
",
phnum +1, LEFT +1, phnum +1);
printf("Philosopher %d is thinking
", phnum +1);
test(LEFT);
test(RIGHT);
// TODO : use semaphore post
}
void* philosopher(void* num){
while (1){
int* i = num;
sleep(1);
take_fork(*i);
sleep(0);
put_fork(*i);
}
}
int main(){
int i;
pthread_t thread_id[N];
// initialize the semaphores
sem_init(&mutex, 0,1);
for (i =0; i < N; i++)
sem_init(&S[i],0,0);
for (i =0; i < N; i++){
// create philosopher processes
pthread_create(&thread_id[i], NULL,
philosopher, &phil[i]);
printf("Philosopher %d is thinking
", i +1);
}
for (i =0; i < N; i++)
pthread_join(thread_id[i], NULL);
}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions