std :: shared_mutex与std :: shared_lock是读者还是作者更喜欢?

时间:2017-04-09 16:50:42

标签: c++ c++17

在实施读写器锁定时,我们可以使用std::shared_mutex std::shared_lockstd::lock_guardstd::unique_lock

问题>这个新的特写作者或读者是否更喜欢?

根据安德鲁的评论更新

Reference

  // 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_++;
  }

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

2 个答案:

答案 0 :(得分:3)

它既不是(如果实施得当)。而是通过 fair 技术选择读者和作者。这就是为什么这个特性既不能在API中设置也不能指定的原因。

This answer详细说明了如何完成。

答案 1 :(得分:3)

在实践中:

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

      

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