我正在尝试使用shared_mutex在C++中实现读写锁。
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();
}
}
这段代码似乎可以正常工作,但我有几个概念问题。
问题1:我看到建议在http://en.cppreference.com/w/cpp/thread/shared_mutex/lock上使用unique_lock和shared_lock,但我不明白为什么,因为shared_mutex已经支持lock和lock_shared方法?
问题2:这段代码是否有可能导致写入饥饿?如果是的话,我该如何避免饥饿?
问题3:还有其他锁定类可以尝试实现读写锁吗?