如何在不指定信号量资源计数的情况下创建ReadWriteMutex?

时间:2010-01-25 08:22:03

标签: c++ concurrency semaphore

ReadWriteMutex的通常模式是使用信号量并使用writer循环来获取所有资源:

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 :(得分:0)

我找到了一个解决方案:使用pthread_rwlock_t(Windows上的ReaderWriterLock)。这些锁不需要特定的'max_readers_count'。

我怀疑这个锁的实现使用某种条件变量来锁定读者在写入者需要写入和原子读取器计数时的条目。

将此与我自制的基于信号量的锁相比较表明,作家受到青睐(他们倾向于首先运行)。