带有 std::shared_lock 的 std::shared_mutex 是读者还是作者更喜欢?

q09*_*987 3 c++ c++17

在读写锁的实现中,我们可以使用std::shared_mutexwithstd::shared_lockstd::lock_guardor std::unique_lock

问题> 这个新功能作者更喜欢还是读者更喜欢?

根据安德鲁的评论更新

参考

  // Multiple threads/readers can read the counter's value at the same time.
  unsigned int get() const {
    std::shared_lock<std::shared_mutex> lock(mutex_);
    return value_;
  }

  // Only one thread/writer can increment/write the counter's value.
  void increment() {
    std::unique_lock<std::shared_mutex> lock(mutex_);
    value_++;
  }
Run Code Online (Sandbox Code Playgroud)

从上面的示例中可以看出,我无法控制读取器/写入器的优先级。

T.C*_*.C. 5

在实践中:

  • libc++ 总是使用 Howard 提到的互斥量+条件变量技术,这并不奇怪。
  • libstdc++pthread_rwlock_t在可用的情况下使用,如果不是,则回退到 Howard 提到的算法。因此,如果pthread_rwlock_t可用,则使用的算法取决于 pthreads 实现。我相信 glibc 默认更喜欢读者。
  • MSVC 使用 Windows SRWLOCK,其文档

    无法保证请求所有权的线程被授予所有权的顺序;SRW 锁既不公平也不先进先出。