#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
#define sz 5
sem_t wrt,read;
int readcount=0;
void * writer(void * arg);
void * reader(void * arg);
void main()
{
pthread_t t1[6];
int j,i,r[]={1,2,3,4,1,2};
sem_init(&wrt,0,1);
sem_init(&read,0,1);
for(j=0;j<4;j++)
pthread_create(&t1[j],NULL,reader,(void *)&r[j]);
for(j=4;j<6;j++)
pthread_create(&t1[j],NULL,writer,(void *)&r[j]);
for(j=0;j<6;j++)
pthread_join(t1[j],NULL);
}
void * writer(void * arg)
{
int i=*(int*)arg;
while(1)
{
printf("\nWriter %d Waiting",i);
sem_wait(&wrt);
printf("\nWriter %d writing",i);
sleep(3);
printf("\nWriter %d Finished",i);
sem_post(&wrt);
sleep(3);
}
}
void * reader(void * arg)
{
int i=*(int*)arg;
while(1)
{
printf("\nReader %d is Waiting",i);
sem_wait(&read);
readcount++;
if(readcount==1)
sem_wait(&wrt);
sem_post(&read);
printf("\nReader %d is Reading",i);
sleep(2);
sem_wait(&read);
readcount--;
printf("\nReader %d is Finished",i);
if(readcount==0)
{
sem_post(&wrt);
}
sem_post(&read);
sleep(4);
}
}
#include<pthread.h>
#include<semaphore.h>
#define sz 5
sem_t wrt,read;
int readcount=0;
void * writer(void * arg);
void * reader(void * arg);
void main()
{
pthread_t t1[6];
int j,i,r[]={1,2,3,4,1,2};
sem_init(&wrt,0,1);
sem_init(&read,0,1);
for(j=0;j<4;j++)
pthread_create(&t1[j],NULL,reader,(void *)&r[j]);
for(j=4;j<6;j++)
pthread_create(&t1[j],NULL,writer,(void *)&r[j]);
for(j=0;j<6;j++)
pthread_join(t1[j],NULL);
}
void * writer(void * arg)
{
int i=*(int*)arg;
while(1)
{
printf("\nWriter %d Waiting",i);
sem_wait(&wrt);
printf("\nWriter %d writing",i);
sleep(3);
printf("\nWriter %d Finished",i);
sem_post(&wrt);
sleep(3);
}
}
void * reader(void * arg)
{
int i=*(int*)arg;
while(1)
{
printf("\nReader %d is Waiting",i);
sem_wait(&read);
readcount++;
if(readcount==1)
sem_wait(&wrt);
sem_post(&read);
printf("\nReader %d is Reading",i);
sleep(2);
sem_wait(&read);
readcount--;
printf("\nReader %d is Finished",i);
if(readcount==0)
{
sem_post(&wrt);
}
sem_post(&read);
sleep(4);
}
}
No comments:
Post a Comment