Lab6
Lab6
xperiment Number: 6
Problem Statement:
Problem A:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
// Reading data
printf("Reader %d is reading...\n", reader_id);
sleep(1);
// Reader leaving
pthread_mutex_lock(&mutex);
readCount--;
if (readCount == 0) {
pthread_mutex_unlock(&db);
}
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *writer(void *arg) {
int writer_id = *(int *)arg;
// Writing data
printf("Writer %d is writing data...\n", writer_id);
sleep(1);
pthread_exit(NULL);
}
int main() {
pthread_t readers[2], writers[2];
int reader_ids[2] = {1, 2};
int writer_ids[2] = {1, 2};
// Clean up
for (int i = 0; i < 2; i++) {
pthread_cancel(readers[i]);
pthread_cancel(writers[i]);
pthread_join(readers[i], NULL);
pthread_join(writers[i], NULL);
}
return 0;
}
Output:
Problem B:
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
// Reading data
printf("Reader %d is reading...\n", reader_id);
sleep(1);
// Reader leaving
sem_wait(&mutex);
readCount--;
if (readCount == 0) {
sem_post(&db);
}
sem_post(&mutex);
pthread_exit(NULL);
}
// Writing data
printf("Writer %d is writing data...\n", writer_id);
sleep(1);
pthread_exit(NULL);
}
int main() {
pthread_t readers[2], writers[2];
int reader_ids[2] = {1, 2};
int writer_ids[2] = {1, 2};
sem_init(&mutex, 0, 1);
sem_init(&db, 0, 1);
// Clean up
for (int i = 0; i < 2; i++) {
pthread_cancel(readers[i]);
pthread_cancel(writers[i]);
pthread_join(readers[i], NULL);
pthread_join(writers[i], NULL);
}
sem_destroy(&mutex);
sem_destroy(&db);
return 0;
}
Output: