我试图使用读取C++使用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();
}
}
的代码似乎是工作精细/写锁,但我有几个概念性问题。
Q1。我看到在http://en.cppreference.com/w/cpp/thread/shared_mutex/lock上使用unique_lock和shared_lock的建议,但我不明白为什么,因为shared_mutex已经支持lock和lock_shared方法了? Q2302。这段代码是否有可能导致写入不足?如果是的话,我该如何避免饥饿?
Q3。有没有其他的锁类可以尝试实现读写锁定?
如果您观察到写入饥饿(或读取饥饿),请提交错误报告。存在确保饥饿不会发生的算法,这就是为什么在此代码中没有读写器优先级API的原因。有关此类算法的链接,请参阅http://stackoverflow.com/a/14307116/576911。下面是一篇文章链接,其中包含基本原理和部分实现:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2406.html#shared_mutex_imp –