0% found this document useful (0 votes)
24 views3 pages

Advance

Uploaded by

Haritha T.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views3 pages

Advance

Uploaded by

Haritha T.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Experiment 7:

AIM: Write a program to Producer-consumer problem Using semaphores


source code:
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#define BUFFER_SIZE 5
sem_t empty, full, mutex;
int buffer[BUFFER_SIZE];
int index_producer = 0;
int index_consumer = 0;
// Producer function
void *producer(void *arg) {
int item = 1;
while (1) {
sem_wait(&empty); // Decrease empty count
sem_wait(&mutex); // Lock the buffer

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

You might also like