【发布时间】:2014-09-02 10:28:25
【问题描述】:
我发现 Visual Studio 2013 中的 std::mutex 实现太慢了。它使用重量级的互斥锁来确保即使在进程之间也能实现同步,这一切都很好而且很花哨;除非您不与其他进程交谈,并且可以真正使用 CRITICAL_SECTION 在 Win32 上的自旋锁提供的额外速度。
我尝试实现一个fast_recursive_mutex,它遵循 C++11 互斥锁概念并根据规范履行所有义务。从任何意义上说,只要您不在进程之间进行同步,它就是 std::mutex 的直接替代品。
它适用于 std::lock_guard 和 std::unique_lock。但是我在尝试将它与std::condition_variable 一起使用时遇到了问题,因为std::condition_variable::wait(std::unique_lock<std::mutex>&) 不承认我的fast_recursive_mutex 由于std::mutex 的硬编码使用。
所以我的问题是:
- 为什么
wait()不接受除std::mutex之外的其他互斥锁类型? - 我能做些什么吗? (没有重新实现 condition_variable)。
【问题讨论】:
-
第一个问题是“为什么它不承认另一种类型”,您可能会问他们为什么编写两个不同的
condition_variable类而不是简单地将一个类型与模板互斥类型。
标签: c++ c++11 stl mutex condition-variable