Question: Can someone please fix the logical error in this code? It keeps looping. #include #include #include #define N 5 #define THINKING 2 #define HUNGRY 1
Can someone please fix the logical error in this code? It keeps looping.
#include
void take_fork(int phnum){ sem_wait(&mutex); state[phnum] = HUNGRY; printf("Philosopher %d is Hungry ", phnum + 1); test(phnum); sem_post(&mutex); sem_wait(&S[phnum]); sleep(1); }
void put_fork(int phnum){ sem_wait(&mutex); 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); sem_post(&mutex); } void* philospher(void* num){ while(1){ int* i = num; sleep(1); take_fork(*i); sleep(0); put_fork(*i); } } int main(void){ int i; pthread_t thread_id[N]; sem_init(&mutex, 0, 1); for (i = 0; i < N; i++){ sem_init(&S[i], 0, 0); } for (i = 0; i < N; i++){ pthread_create(&thread_id[i], NULL, philospher, &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
Get step-by-step solutions from verified subject matter experts
