如何在c++ 14中实现读/写锁
How to implement a reader/writer lock in C++14
我有一个哈希表数据结构,我希望通过使用读/写锁来使线程安全(我的读:写比率可能在100:1的范围内)。
我一直在寻找如何使用c++ 11实现这个锁(比如这里的方法),但是我注意到应该可以使用c++ 14的shared_lock
来完成同样的事情。然而,在查看cppreference之后,我发现了std::shared_lock
和std::unique_lock
,但我不明白如何将它们一起使用(与Boost方式相比,Boost方式具有简单的方法调用,用于唯一地锁定和共享模式)。
如何在c++ 14中使用标准库重新创建这个相对简单的读/写锁接口?
c++ 14有std::shared_timed_mutex
的读写锁实现
旁注:c++ 17增加了更简单的类std::shared_mutex
,如果你不需要额外的计时函数(如shared_timed_mutex::try_lock_for
和shared_timed_mutex::try_lock_until
),你可以使用它。
但是,在使用读/写锁之前,要注意潜在的有害性能影响。根据具体情况,简单的std::mutex
可能更快。
相关文章:
- C++:如果 std::atomic_flag 是唯一的无锁原子类型,如何在C++中实现无锁数据结构?
- 简单的读写锁
- 使用 std::atomic 实现无锁结构,Dtor 崩溃
- 优化读/写锁的实现
- 提升::Asio 写锁
- 如何使用c++11原子库实现seqlock锁
- 在磁盘上实现无锁数据结构
- 在 Boost 中实现旋转锁.需要示例
- 如何从更基本的同步原语中创建多读/单写锁
- 此用例是否需要读写锁
- 将地址和布尔值存储在一个单词中,以实现无锁双链表
- 实现写时复制
- 在线程内部函数上使用哪种保护方法(互斥,读写锁.)
- 使用原子实现票据锁会产生额外的mov
- 我们可以在socket Map上使用读写锁吗?
- tmultireadexexclusivewritesynchronizer将写锁降级为读锁时的行为
- 在ZeroMQ中实现无锁的多线程应用程序
- 在另一个函数中增强读/写锁
- 单个进程中有数千个读/写锁
- 如何在c++ 14中实现读/写锁