我有一个哈希表数据结构,我希望通过使用读/写锁来使线程安全(我的读:写比率可能在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
可能更快。