This is my attempt. But I am not so sure if the conditional variable and mutex lock is applied correctly.
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t readers_cv, writers_cv;
int readers_count = 0;
void Reader() {
pthread_mutex_lock(&mutex);
readers_count++;
if (readers_count == 1) {
pthread_mutex_lock(&writers_cv);
}
pthread_mutex_unlock(&mutex);
// Perform reading
pthread_mutex_lock(&mutex);
readers_count--;
if (readers_count == 0) {
pthread_cond_signal(&writers_cv);
}
pthread_mutex_unlock(&mutex);
}
void Writer() {
pthread_mutex_lock(&mutex);
while (readers_count > 0) {
pthread_cond_wait(&writers_cv, &mutex);
}
// Perform writing
pthread_mutex_unlock(&mutex);
}