Advance
Advance
buffer[index_producer] = item;
printf("Producer produced item: %d\n", item);
index_producer = (index_producer + 1) % BUFFER_SIZE;
item++;
sem_post(&mutex); // Unlock the buffer
sem_post(&full); // Increase full count
sleep(1);
}
}
// Consumer function
void *consumer(void *arg) {
while (1) {
sem_wait(&full); // Decrease full count
sem_wait(&mutex); // Lock the buffer
int item = buffer[index_consumer];
printf("Consumer consumed item: %d\n", item);
index_consumer = (index_consumer + 1) % BUFFER_SIZE;
sem_post(&mutex); // Unlock the buffer
sem_post(&empty); // Increase empty count
sleep(2);
}
}
int main() {
pthread_t prod_thread, cons_thread;
// Initialize semaphores
sem_init(&empty, 0, BUFFER_SIZE);
sem_init(&full, 0, 0);
sem_init(&mutex, 0, 1);
// Create producer and consumer threads
pthread_create(&prod_thread, NULL, producer, NULL);
pthread_create(&cons_thread, NULL, consumer, NULL);
// Join threads
pthread_join(prod_thread, NULL);
pthread_join(cons_thread, NULL);
// Destroy semaphores
sem_destroy(&empty);
sem_destroy(&full);
sem_destroy(&mutex);
return 0;
}
output:
This program implements the Producer-Consumer problem using three semaphores: empty to track
empty slots in the buffer, full to track filled slots in the buffer, and mutex to provide mutual exclusion
while accessing the buffer
sample output:
Producer produced item: 1
Producer produced item: 2
Producer produced item: 3
Consumer consumed item: 1
Producer produced item: 4
Producer produced item: 5
Consumer consumed item: 2
Producer produced item: 6
Consumer consumed item: 3
Producer produced item: 7
Consumer consumed item: 4
Producer produced item: 8
Consumer consumed item: 5
Producer produced item: 9
Consumer consumed item: 6
Producer produced item: 10
Consumer consumed item: 7
Producer produced item: 11
Consumer consumed item: 8
Producer produced item: 12
Consumer consumed item: 9
Producer produced item: 13
Consumer consumed item: 10
Producer produced item: 14
Consumer consumed item: 11
Producer produced item: 15
Consumer consumed item: 12
Producer produced item: 16
Consumer consumed item: 13
Producer produced item: 17
Consumer consumed item: 14
Producer produced item: 18
Consumer consumed item: 15
Producer produced item: 19
Consumer consumed item: 16
Producer produced item: 20
Consumer consumed item: 17