✅ The verified answer to this question is available below. Our community-reviewed solutions help you understand the material better.
Which of the following is true about the below code for a reader-writer lock that allows multiple readers in a critical section, but never more than one writer and never a writer and readers at the same time.
typedef struct {
sem_t rw_mutex;
sem_t rcount_mutex;
sem_t writer_waiting;
int reader_count;
} rw_lock_t;
void rw_lock_init(rw_lock_t *lock) {
sem_init(&lock->rw_mutex, 0, 1);
sem_init(&lock->rcount_mutex, 0, 1);
sem_init(&lock->writer_waiting, 0, 1);
lock->reader_count = 0;
}
void reader_lock(rw_lock_t *lock) {
sem_wait(&lock->writer_waiting);
sem_wait(&lock->rcount_mutex);
lock->reader_count++;
if (lock->reader_count == 1) {
sem_wait(&lock->rw_mutex);
}
sem_post(&lock->rcount_mutex);
sem_post(&lock->writer_waiting);
}
void reader_unlock(rw_lock_t *lock) {
sem_wait(&lock->rcount_mutex);
lock->reader_count--;
if (lock->reader_count == 0) {
sem_post(&lock->rw_mutex);
}
sem_post(&lock->rcount_mutex);
}
void writer_lock(rw_lock_t *lock) {
sem_wait(&lock->writer_waiting);
sem_wait(&lock->rw_mutex);
}
void writer_unlock(rw_lock_t *lock) {
sem_post(&lock->rw_mutex);
sem_post(&lock->writer_waiting);
}
Get Unlimited Answers To Exam Questions - Install Crowdly Extension Now!