Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

std::shared_mutex with std::shared_lock is reader or writer preferring?

Tags:

c++

c++17

In implementation of reader-writer lock, we can make use of the std::shared_mutex with std::shared_lock and std::lock_guard or std::unique_lock.

Question> Is this new feature writer or reader preferring?

Update based on Andrew's comment

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

As you can see from above example, I have no control on the reader/writer priority.

like image 278
q0987 Avatar asked Sep 10 '25 17:09

q0987


1 Answers

In practice:

  • libc++ always uses the mutex+condition variables technique Howard mentioned, not surprisingly.
  • libstdc++ uses pthread_rwlock_t where available, falling back to the algorithm Howard mentioned if it is not. Therefore if pthread_rwlock_t is available, the algorithm used depends on the pthreads implementation. I believe that glibc prefers readers by default.
  • MSVC uses Windows SRWLOCK, whose documentation says

    There is no guarantee about the order in which threads that request ownership will be granted ownership; SRW locks are neither fair nor FIFO.

like image 91
T.C. Avatar answered Sep 13 '25 06:09

T.C.