#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#define sz 5
sem_t chop[sz];
void *right(void *i)
{
int *j,k;
j=(int *)i;
k=*j;
while(1)
{
printf("\n Philosopher %d is Thinking :",k);
sleep(3);
printf("\n Philosopher %d is waiting for chop :",k);
sem_wait(&chop[k]); //right
sem_wait(&chop[(k+1)%5]); //left
printf("\n Philosopher %d is Eating:",k);
sleep(3);
printf(" \n philosopher %d finished Eating :",k);
sem_post(&chop[(k+1)%5]); //left
sem_post(&chop[k]); //right
}
}
void *left(void *i)
{
int *j,k;
j=(int *)i;
k=*j;
while(1)
{
printf("\n Philosopher %d is Thinking :",k);
sleep(3);
printf("\n Philosopher %d is waiting for chop :",k);
sem_wait(&chop[(k+1)%5]); //left
sem_wait(&chop[k]); //right
printf("\n Philosopher %d is Eating:",k);
sleep(3);
printf(" \n philosopher %d finished Eating :",k);
sem_post(&chop[k]); //right
sem_post(&chop[(k+1)%5]); //left
}
}
void main()
{
int i,pno[sz]={0,1,2,3,4};
pthread_t l1,r1,l2,r2,l3;
for(i=0;i<sz;i++)
sem_init(&chop[i],0,1);
pthread_create(&l1,NULL,left,(void *)&pno[0]);
pthread_create(&r1,NULL,right,(void *)&pno[1]);
pthread_create(&l2,NULL,left,(void *)&pno[2]);
pthread_create(&r2,NULL,right,(void *)&pno[3]);
pthread_create(&l3,NULL,left,(void *)&pno[4]);
pthread_join(l1,NULL);
pthread_join(l2,NULL);
pthread_join(l3,NULL);
pthread_join(r1,NULL);
pthread_join(r2,NULL);
}
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#define sz 5
sem_t chop[sz];
void *right(void *i)
{
int *j,k;
j=(int *)i;
k=*j;
while(1)
{
printf("\n Philosopher %d is Thinking :",k);
sleep(3);
printf("\n Philosopher %d is waiting for chop :",k);
sem_wait(&chop[k]); //right
sem_wait(&chop[(k+1)%5]); //left
printf("\n Philosopher %d is Eating:",k);
sleep(3);
printf(" \n philosopher %d finished Eating :",k);
sem_post(&chop[(k+1)%5]); //left
sem_post(&chop[k]); //right
}
}
void *left(void *i)
{
int *j,k;
j=(int *)i;
k=*j;
while(1)
{
printf("\n Philosopher %d is Thinking :",k);
sleep(3);
printf("\n Philosopher %d is waiting for chop :",k);
sem_wait(&chop[(k+1)%5]); //left
sem_wait(&chop[k]); //right
printf("\n Philosopher %d is Eating:",k);
sleep(3);
printf(" \n philosopher %d finished Eating :",k);
sem_post(&chop[k]); //right
sem_post(&chop[(k+1)%5]); //left
}
}
void main()
{
int i,pno[sz]={0,1,2,3,4};
pthread_t l1,r1,l2,r2,l3;
for(i=0;i<sz;i++)
sem_init(&chop[i],0,1);
pthread_create(&l1,NULL,left,(void *)&pno[0]);
pthread_create(&r1,NULL,right,(void *)&pno[1]);
pthread_create(&l2,NULL,left,(void *)&pno[2]);
pthread_create(&r2,NULL,right,(void *)&pno[3]);
pthread_create(&l3,NULL,left,(void *)&pno[4]);
pthread_join(l1,NULL);
pthread_join(l2,NULL);
pthread_join(l3,NULL);
pthread_join(r1,NULL);
pthread_join(r2,NULL);
}
No comments:
Post a Comment