是否可以实现由std :: condition_variable使用的C++ 11互斥锁概念?

Emi*_* L. 9 c++ mutex stl condition-variable c++11

我发现std::mutexVisual Studio 2013 中的实现太慢了.它使用重量级互斥锁,以确保即使在完全正常和花花公子的过程之间也可以实现同步; 除非你没有与其他进程交谈,并且可以真正使用CRITICAL_SECTION它在Win32上的自旋锁定优惠的额外速度.

我试图实现一个fast_recursive_mutex符合C++ 11互斥概念的东西,并且根据规范履行所有义务.从各方面来说,std::mutex只要您没有在进程之间进行同步,它就是替代品.

它与std::lock_guardstd::unique_lock.但是我在尝试使用它时会遇到问题,std::condition_variable因为由于硬编码的使用std::condition_variable::wait(std::unique_lock<std::mutex>&)而不承认我.fast_recursive_mutexstd::mutex

所以我的问题是:

  1. 为什么不wait()承认另一种互斥类型std::mutex呢?
  2. 有什么我可以做的吗?(没有重新实施condition_variable).

Pio*_*cki 6

您可以使用std::condition_variable_any任何可锁定类型.

  • 当我查看参考文献和谷歌搜索时,我简直不敢相信我错过了这一点......谢谢! (2认同)