subject

Dining Philosopher’s 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.

To prevent the deadlock, in class we have discussed three solutions:
1. Allow at most 4 philosophers to be sitting simultaneously at the table.
2. Allow a philosopher to pick up her chopsticks only if both are available
3. 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.

The following program can lead to a deadlock.
? Run the program and observe the deadlock condition.
? Based on the program, please implement the above three solutions to prevent the deadlock. Each
solution should be saved as an individual C program
(e. g. solution1.c, solution2.c, and solution3.c).

Include necessary comments in your programs.
Submission: solution2.c and solution3.c on Blackboard

#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],NU LL, 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\n",ph_num);
sem_wait(&S[ph_num]); //take the left chopstick
printf("Philosopher %d takes chopstick %d \n",ph_num, ph_num);

sleep(1);

sem_wait (&S[(ph_num+1)%N]); //take the right chopstick
printf("Philosopher %d takes chopstick %d \n",ph_num,(ph_num+1)%N);

printf("Philosopher %d is eating\n",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 \n",ph_num, ph_num);
sleep(1);
sem_post (&S[(ph_num+1)%N]); //put the right chopstick
printf("Philosopher %d putting chopstick %d \n",ph_num,(ph_num+1)%N);
printf("Philosopher %d is thinking\n",ph_num);
sleep(1);

}

ansver
Answers: 2

Other questions on the subject: Computers and Technology

image
Computers and Technology, 22.06.2019 19:00, dadonelson2109
If your accelerator suddenly gets stuck what should you do
Answers: 2
image
Computers and Technology, 23.06.2019 06:30, wwesuplexcity28
To become an audio technician, the most successful tactics might include the following. (select all that apply). learning how to persuade other people gaining different types of experience in audio technology learning as much as possible about art history establishing a reputation as a reliable professional
Answers: 1
image
Computers and Technology, 23.06.2019 15:00, med69
Barbara is interested in pursuing a career in the science and math pathway. which qualifications will her reach that goal? a. an advanced knowledge of physics and math b. an advanced knowledge of engineering and math c. an advanced knowledge of physics and robotics an d. advanced knowledge of machinery and math
Answers: 2
image
Computers and Technology, 23.06.2019 15:30, PlzNoToxicBan
The song about casey jones a railroad engineer who gives his life on the job would most likely gall under the folk song category of? a-work song b-nonsense song c-religious song d-ballad
Answers: 1
You know the right answer?
Dining Philosopher’s problem is a famous problem in OS. A deadlock may happen when all philosopher...

Questions in other subjects:

Konu
Mathematics, 03.12.2020 19:00
Konu
Mathematics, 03.12.2020 19:00