Как создать ReadWriteMutex без указания количества ресурсов семафора? - PullRequest
2 голосов
/ 25 января 2010

Обычный шаблон для ReadWriteMutex - это использование семафора и цикл записи для получения всех ресурсов:

inline void write_lock() {
  ScopedLock lock(acquire_mutex_);
  for (size_t i=0; i < resource_count_; ++i) {
    if (sem_wait(semaphore_) < 0) {
      fprintf(stderr, "Could not acquire semaphore (%s)\n", strerror(errno));
    }
  }
}

Это нормально, за исключением того, что вы должны указывать количество ресурсов во время инициализации семафора, а произвольный выбор количества ресурсов 10 или 99999 не подходит. Есть ли лучший шаблон, который позволял бы «бесконечным» читателям (не нужно подсчитывать ресурсы)?

1 Ответ

0 голосов
/ 25 января 2010

Я нашел решение: использовать pthread_rwlock_t (ReaderWriterLock в Windows). Эти блокировки не требуют определенного max_readers_count.

Я подозреваю, что реализация для этой блокировки использует некоторую переменную условия, чтобы заблокировать запись читателей, когда писателю нужно написать и атомарное число читателей.

Сравнение этого с моим доморощенным замком, основанным на семафоре, показывает, что авторам нравится (они, как правило, запускаются первыми).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...