【发布时间】:2016-06-05 22:57:36
【问题描述】:
我正在尝试使用 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();
}
}
代码似乎运行良好,但我有一些概念性问题。
第一季度。我在http://en.cppreference.com/w/cpp/thread/shared_mutex/lock 上看到了使用unique_lock 和shared_lock 的建议,但我不明白为什么,因为shared_mutex 已经支持lock 和lock_shared 方法?
第二季度。此代码是否有可能导致写入饥饿?如果是,那我怎样才能避免饥饿?
第三季度。有没有其他的锁类我可以尝试实现读写锁?
【问题讨论】:
-
如果您观察到写入饥饿(或读取饥饿),请提交错误报告。存在确保不会发生饥饿的算法,这就是为什么此代码中没有读取器/写入器优先级 API。有关此类算法的链接,请参阅stackoverflow.com/a/14307116/576911。这是一篇论文的链接,其中包含基本原理和部分实现:open-std.org/jtc1/sc22/wg21/docs/papers/2007/…
标签: c++ multithreading concurrency locking mutex