Monday, December 8, 2008

Scoped Reader/Writer locks using Boost::thread

The good news: boost::thread 1.37 has native reader/writer lock (they call them shared_mutex). The bad news: there is no scoped version of these, so you have to "manually" lock_shared, unlock_shared. Here's "scoped" versions of these

// this code is in public domain
// http://blog.modp.com/2008/12/scoped-readerwriter-locks-using.html

#include <boost/thread/shared_mutex.hpp>

class scoped_read_lock
{
private:
  boost::shared_mutex&  rwlock;
public:
  scoped_read_lock(boost::shared_mutex& lock)
    : rwlock(lock) { rwlock.lock_shared(); }
  ~scoped_read_lock() { rwlock.unlock_shared(); }  
};

class scoped_write_lock {
private:
  boost::shared_mutex& rwlock;
public:
  scoped_write_lock(boost::shared_mutex& lock)
    : rwlock(lock) { rwlock.lock(); }
  ~scoped_write_lock() { rwlock.unlock(); }
};
Usage:
boost::shared_mutex mylock.
...
...
{ 
  scoped_reader_lock reader_lock(mylock);
   // stuff...
   // stuff...
} // unlocked automatically

1 comments:

Vince said...

Funny that you wrote about this cos I'm just hacking away at this on you know what. :)