Вы находитесь на странице: 1из 3

READER WRITER

#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<stdlib.h>
#define buffersize 10
pthread_mutex_t mutex;
pthread_t tidR[20],tidW[20];
sem_t wrt;
int readcount,item;
int buffer[buffersize];
void initialize()
{
pthread_mutex_init(&mutex,NULL);
sem_init(&wrt,1,1);
readcount=0;
}
void *reader(void *param){
pthread_mutex_lock(&mutex) ;
readcount ++ ;
if (readcount == 1)
sem_wait(&wrt) ;
pthread_mutex_unlock(&mutex);
item=read();
printf("\nReader has read the item: %d\n",item);
// reading is performed
pthread_mutex_lock(&mutex) ;
readcount--;
if (readcount == 0)
sem_post(&wrt) ;
pthread_mutex_unlock(&mutex) ;
}

void *writer(void *param)


{
sem_wait(&wrt) ;
item=rand()%5;
printf("\nWriter has written the item: %d\n",item);
write(item);
// writing is performed
sem_post(&wrt) ;
}
void write(int item)
{
buffer[readcount++]=item;
}

int read()
{
return(buffer[--readcount]);
}
int main()
{
int n1,n2,i;
initialize();
printf("\nEnter the no of readers: ");
scanf("%d",&n1);
printf("\nEnter the no of writerss: ");
scanf("%d",&n2);
for(i=0;i<n1;i++)
pthread_create(&tidW[i],NULL,writer,NULL);
for(i=0;i<n2;i++)
pthread_create(&tidR[i],NULL,reader,NULL);
for(i=0;i<n1;i++)
pthread_join(tidW[i],NULL);
for(i=0;i<n2;i++)
pthread_join(tidR[i],NULL);

//sleep(5);
exit(0);
}

DINING PHILOSOPHER
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<stdlib.h>

pthread_mutex_t mutex;
pthread_t tid[5];
sem_t chopstick[5];

void initialize()
{
pthread_mutex_init(&mutex,NULL);
for(int i=0;i<5;i++)
sem_init(&chopstick[i],1,1);// shared or not , starting value

void * philosopher (void * param)


{
int i=rand()%5;
sem_wait(&chopstick[i]);
sem_wait(&chopstick[(i+1)%5]);
pthread_mutex_lock(&mutex);
sleep(1);
printf(" EATING....%d",i);
printf("\n");
pthread_mutex_unlock(&mutex);
sem_post(&chopstick[i]);
sem_post(&chopstick[(i+1)%5]);
}

void main()
{
int n=5,i;
initialize();

for(i=0;i<n;i++)
pthread_create(&tid[i],NULL,philosopher,NULL);
printf("Thread Created\n");
for(i=0;i<n;i++)
pthread_join(tid[i],NULL);

exit(0);
}

Вам также может понравиться