Boost WITH Writer块中的多个读取器、单个写入程序锁定
Multiple-Reader, Single-Writer Lock in Boost WITH Writer Block
这里的答案几乎符合我的要求。
我想要一个读写锁,它将:
- 只要没有写入程序,就允许读者取锁
- 如果写入程序尝试锁定,请阻止新的读卡器进行锁定,但允许旧的读卡者在将锁定交给写入程序之前完成锁定
- 写入程序释放锁后,允许新的读卡器
上述实施不符合标准(2)。它允许新的读者抓住锁并屏蔽作者,直到他们完成为止。
找到了。我需要unique_lock
而不是upgrade_to_unique_lock
:
boost::shared_mutex _access;
void reader()
{
// get shared access
boost::shared_lock<boost::shared_mutex> lock(_access);
}
void writer()
{
// wait for old shared access readers to finish
// but block out new shared access readers
boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
}
但是这里的"writer"方法没有"lock"属性。你的意思是,在"unique_lock"之前,你还需要做"upgrade_lock"吗?类似于:
void writer()
{
// get upgradable access
boost::upgrade_lock<boost::shared_mutex> lock(_access);
// get exclusive access
boost::unique_lock<boost::shared_mutex> uniqueLock(lock);
// now we have exclusive access
}
或者你混合了属性,应该是:
void writer()
{
boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
// now we have exclusive access
}
相关文章:
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 假想的锁定机制:非阻滞写,阅读和无效
- 线程安全 std::map:锁定整个映射和单个值
- 如何使用单个解锁方法(可称为读取器或写入器)实现C++读写器锁?
- mutex或flock fcntl.h来锁定只写操作
- 跨进程互斥读/写锁定
- 交换缓冲区而不锁定单个生产者和多个使用者
- boost中是否有允许写偏锁定的功能
- MVCC实现中的无锁定读写器同步
- 在处理读写时,我应该锁定哪个部分
- 线程读锁定与写锁定
- 线程读写锁定问题
- 跨平台可上行和可降级读/写锁定
- C++中读取写锁定实现
- 仅使用关键部分的读/写锁定会导致死锁
- 将读锁定升级为写锁定,而不在 C++11 中释放第一个
- pthread读写锁定无限期行为
- 使用单个写操作写入多个VA位置
- 具有独立读线程和写线程的单个队列是否需要锁定