program 3

 #include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#include <semaphore.h>


#include <unistd.h>

#define BUFFER_SIZE 5

sem_t empty, full;

pthread_mutex_t mutex;

int buffer[BUFFER_SIZE];

int in = 0, out = 0;

void *producer(void *arg) {

int item;

for (int i = 0; i < BUFFER_SIZE; i++) {

item = rand() % 100; // Produce an item

sem_wait(&empty);

pthread_mutex_lock(&mutex);

buffer[in] = item;

printf("Producer produced item %d at position %d\n", item, in);

in = (in + 1) % BUFFER_SIZE;

pthread_mutex_unlock(&mutex);

sem_post(&full);

sleep(1);

}

pthread_exit(NULL);

}

void *consumer(void *arg) {

int item;

for (int i = 0; i < BUFFER_SIZE; i++) {

sem_wait(&full);

pthread_mutex_lock(&mutex);

item = buffer[out];

printf("Consumer consumed item %d from position %d\n", item, out);

out = (out + 1) % BUFFER_SIZE;

pthread_mutex_unlock(&mutex);

sem_post(&empty);

sleep(2);

}

pthread_exit(NULL);

}

int main() {

pthread_t producer_thread, consumer_thread;

pthread_mutex_init(&mutex, NULL);

sem_init(&empty, 0, BUFFER_SIZE);

sem_init(&full, 0, 0);

// Create producer and consumer threads

pthread_create(&producer_thread, NULL, producer, NULL);

pthread_create(&consumer_thread, NULL, consumer, NULL);

// Wait for threads to finish

pthread_join(producer_thread, NULL);

pthread_join(consumer_thread, NULL);

pthread_mutex_destroy(&mutex);


sem_destroy(&empty);

sem_destroy(&full);

return 0;

}

Comments

Popular posts from this blog

program 5

program 4