读者写着问题
C 代码实现
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <stdio.h>
int reader_count = 0;
pthread_mutex_t ownership;
pthread_mutex_t mutex;
void *reader_routine(void *num) {
  int id = *(int *)num;
  while (1) {
    pthread_mutex_lock(&mutex);
    if (reader_count == 0) {
      pthread_mutex_lock(&ownership);
    }
    reader_count++;
    pthread_mutex_unlock(&mutex);
    printf("Reader %d is reading ...\n", id);
    usleep(300);
    pthread_mutex_lock(&mutex);
    reader_count--;
    if (reader_count == 0) {
      pthread_mutex_unlock(&ownership);
    }
    pthread_mutex_unlock(&mutex);
    usleep(100);
  }
}
void *writer_routine() {
  while (1) {
    pthread_mutex_lock(&ownership);
    printf("Writer is writing ...\n");
    usleep(500);
    pthread_mutex_unlock(&ownership);
    usleep(100);
  }
}
int main() {
  pthread_t readers[3];
  int reader_ids[3] = {0, 1, 2};
  pthread_t writer;
  pthread_mutex_init(&ownership, NULL);
  pthread_create(&writer, NULL, writer_routine, NULL);
  for (int i = 0; i < 3; i++) {
    pthread_create(&readers[i], NULL, reader_routine, (void *)&reader_ids[i]);
  }
  pthread_join(writer, NULL);
  for (int i = 0; i < 3; i++) {
    pthread_join(readers[i], NULL);
  }
  return 0;
}
运行结果
Reader 0 is reading ...
Reader 2 is reading ...
Reader 1 is reading ...
Writer is writing ...
Reader 0 is reading ...
Reader 2 is reading ...
Reader 1 is reading ...
Writer is writing ...
....