我有一个std::unordered_map
受到来自多个线程的非常重的读取工作负载的影响。我可以使用 astd::mutex
进行同步,但由于并发读取应该没问题,我想使用 aboost::shared_mutex
代替。为了测试性能改进,我首先用一堆值预先填充了一个映射,然后让一堆线程运行读取测试:
for (int i = 0; i < iters; ++i) map.count(random_uint(0, key_max));
我为我受保护的粗锁实现和受.count
std::lock_guard<std::mutex>
boost::shared_lock<boost::shared_mutex>
在我的带有 GCC 6.1.1 的 Arch Linux x86_64 系统上,boost::shared_lock
版本总是较慢!在我朋友的装有 MSVC 2013 的 Windows 10 系统上,boost::shared_lock
总是更快!
完整的、可编译的代码在 github 上:https ://github.com/silverhammermba/sanity
编辑
这似乎是一个特定于平台的问题。看上面。如果其他人可以构建和运行此代码并报告他们是否看到正输出(shared_lock
更快)或负输出(当然互斥锁更快)以及您使用的平台,我将非常感激。