Reader Writer


Database
  • Reader #1
  • Reader #2
  • Reader #3
  • Reader #4
  • Writer
Action on Database
  •  
State
  • WriterWaiting
  • Readers4
  • MutexUnlocked
  • Waiting0
  • Reader Count0
What's going on?
System is ready
Writer Active Waiting
void *writer() {
  sem_wait(&database);
  writeDatabase();
  sem_post(&database);
}
Reader Active Waiting
void *reader() {
  sem_wait(&mutex);
  readerCount++;
  if (readerCount ⚌⚌ 1) {      
    sem_wait(&database);
  }
  sem_post(&mutex);
  read_data();
  sem_wait(&mutex);
  readerCount--;
  if(readerCount==0){
      sem_post(&database);
  }
  sem_post(&mutex);
}