Example for boost shared_mutex (multiple reads/one write)? Example for boost shared_mutex (multiple reads/one write)? multithreading multithreading

Example for boost shared_mutex (multiple reads/one write)?


1800 INFORMATION is more or less correct, but there are a few issues I wanted to correct.

boost::shared_mutex _access;void reader(){  boost::shared_lock< boost::shared_mutex > lock(_access);  // do work here, without anyone having exclusive access}void conditional_writer(){  boost::upgrade_lock< boost::shared_mutex > lock(_access);  // do work here, without anyone having exclusive access  if (something) {    boost::upgrade_to_unique_lock< boost::shared_mutex > uniqueLock(lock);    // do work here, but now you have exclusive access  }  // do more work here, without anyone having exclusive access}void unconditional_writer(){  boost::unique_lock< boost::shared_mutex > lock(_access);  // do work here, with exclusive access}

Also Note, unlike a shared_lock, only a single thread can acquire an upgrade_lock at one time, even when it isn't upgraded (which I thought was awkward when I ran into it). So, if all your readers are conditional writers, you need to find another solution.


It looks like you would do something like this:

boost::shared_mutex _access;void reader(){  // get shared access  boost::shared_lock<boost::shared_mutex> lock(_access);  // now we have shared access}void writer(){  // get upgradable access  boost::upgrade_lock<boost::shared_mutex> lock(_access);  // get exclusive access  boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);  // now we have exclusive access}


Since C++ 17 (VS2015) you can use the standard for read-write locks:

#include <shared_mutex>typedef std::shared_mutex Lock;typedef std::unique_lock< Lock > WriteLock;typedef std::shared_lock< Lock > ReadLock;Lock myLock;void ReadFunction(){    ReadLock r_lock(myLock);    //Do reader stuff}void WriteFunction(){     WriteLock w_lock(myLock);     //Do writer stuff}

For older version, you can use boost with the same syntax:

#include <boost/thread/locks.hpp>#include <boost/thread/shared_mutex.hpp>typedef boost::shared_mutex Lock;typedef boost::unique_lock< Lock >  WriteLock;typedef boost::shared_lock< Lock >  ReadLock;