Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C by Nikhil ( 13 years ago )
#include<stdio.h>
#include<semaphore.h>
#include<pthread.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
sem_t mutex,rite;
int readcount = 0;
void *reader(void *arg)
{
FILE *f1;
char rf;
readcount++;
f1=fopen("it.txt","r");
int f;
f = ((int)arg);
sem_wait(&mutex;);
if(readcount==1)
sem_wait(&rite;);
sem_post(&mutex;);
printf("Data read by the reader%d is\n",f);
while((rf=getc(f1))!=EOF)
{
printf("%c",rf);
}
printf("\n");
sleep(1);
sem_wait(&mutex;);
readcount = readcount - 1;
if(readcount==0)
sem_post(&rite;);
sem_post(&mutex;);
fclose(f1);
}
void *writer(void *arg)
{
int i=0;
FILE *f1;
char wf;
char str[30];
f1=fopen("it.txt","app");
int f;
printf("Enter a string: \n");
scanf("%s",str);
f = ((int) arg);
sem_wait(&rite;);
fputs(str,f1);
sleep(1);
sem_post(&rite;);
fclose(f1);
f1=fopen("it.txt","r");
printf("Data after written by the writer%d is\n",f);
while((wf=getc(f1))!=EOF)
{
printf("%c",wf);
}
//sleep(1);
//sem_post(&rite;);
fclose(f1);
}
main()
{
int i,b,a,rc,wc;
rc=0;
wc=0;
pthread_t rd[5],wr[5];
sem_init(&mutex;,0,1);
sem_init(&rite;,0,1);
while(1)
{
printf("Press 1 to read or 2 to write and 3 to exit\n");
scanf("%d",&a);
if(a==1)
{
rc++;
pthread_create(&rd;[rc],NULL,reader,(void *)rc);
pthread_join(rd[rc],NULL);
}
else if(a==2)
{
wc++;
pthread_create(≀[wc],NULL,writer,(void *)wc);
pthread_join(wr[wc],NULL);
}
else if(a==3)
{
break;
}
else
{
printf("\n Wrong choice");
}
}
}
Revise this Paste