Welcome, guest! Login / Register - Why register?
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&#40;"it.txt","r"&#41;;
  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&#40;"it.txt","app"&#41;;
  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&#40;"it.txt","r"&#41;;
  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(&wr;[wc],NULL,writer,(void *)wc);
    pthread_join(wr[wc],NULL);
  }
  else if(a==3)
  {
    break;
  }
  else
  {
     printf("\n Wrong choice");
  }
 }
}

 

Revise this Paste

Your Name: Code Language: