Producer Consumer


System
  • Consumer #1
  • Consumer #2
  • Consumer #3
  • Producer #1
  • Producer #2
  • Producer #3
Buffer
  •  
State
  • ProducerIdle
  • ConsumerIdle
  • MutexUnlocked
  • Empty3
  • Fill0
What's going on?
System is ready
Producer Active None
void *producer() {
    sem_wait(&empty);
    sem_wait(&mutex);
    produce();
    sem_post(&mutex);
    sem_post(&fill);
    cut_hair(); 
}
Consumer None
void *consumer() {
    sem_wait(&fill);
    sem_wait(&mutex);
    consume();
    sem_post(&mutex);
    sem_post(&empty);
}
producer