2

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 的资源计数感觉不对。是否有更好的模式可以允许“无限”读者(不需要资源计数)?

4

1 回答 1

0

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

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

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

于 2010-01-25T12:19:41.713 回答