Professional Documents
Culture Documents
Rws
Rws
h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#define NUM_READERS 5
#define NUM_WRITERS 5
while (1) {
// Reader entry section
sem_wait(&mutex);
read_count++;
if (read_count == 1) {
sem_wait(&write_mutex); // If the first reader, lock the write mutex
}
sem_post(&mutex);
pthread_exit(NULL);
}
void *writer(void *arg) {
int writer_id = *((int *)arg);
while (1) {
// Writer entry section
sem_wait(&write_mutex);
// Writer critical section
shared_resource++;
printf("Writer %d is writing shared resource: %d\n", writer_id, shared_resource);
usleep(500000); // Simulate some writing time
pthread_exit(NULL);
}
int main() {
pthread_t readers[NUM_READERS], writers[NUM_WRITERS];
int reader_ids[NUM_READERS], writer_ids[NUM_WRITERS];
sem_init(&mutex, 0, 1);
sem_init(&write_mutex, 0, 1);
sem_destroy(&mutex);
sem_destroy(&write_mutex);
return 0;
}
OUTPUT: