I am trying to use read/write lock in C++ using shared_mutex
typedef boost::shared_mutex Lock; typedef boost::unique_lock< Lock > WriteLock; typedef boost::shared_lock< Lock > ReadLock; class Test { Lock lock; WriteLock writeLock; ReadLock readLock; Test() : writeLock(lock), readLock(lock) {} readFn1() { readLock.lock(); /* Some Code */ readLock.unlock(); } readFn2() { readLock.lock(); /* Some Code */ readLock.unlock(); } writeFn1() { writeLock.lock(); /* Some Code */ writeLock.unlock(); } writeFn2() { writeLock.lock(); /* Some Code */ writeLock.unlock(); } } The code seems to be working fine but I have a few conceptual questions.
Q1. I have seen the recommendations to use unique_lock and shared_lock on http://en.cppreference.com/w/cpp/thread/shared_mutex/lock, but I don't understand why because shared_mutex already supports lock and lock_shared methods?
Q2. Does this code have the potential to cause write starvation? If yes then how can I avoid the starvation?
Q3. Is there any other locking class I can try to implement read write lock?