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

时间:2014-09-02 10:28:25

标签: c++ c++11 stl mutex condition-variable

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

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

它适用于std::lock_guardstd::unique_lock。但是,我在尝试将其与std::condition_variable一起使用时遇到问题,因为std::condition_variable::wait(std::unique_lock<std::mutex>&)由于fast_recursive_mutex的硬编码使用而无法接纳我的std::mutex

所以我的问题是:

  1. 为什么wait()不允许其他互斥类型而不是std::mutex
  2. 我能做点什么吗? (没有重新实施condition_variable)。

2 个答案:

答案 0 :(得分:6)

您可以将std::condition_variable_any用于任何可锁定类型

答案 1 :(得分:0)

我相信Visual Studio 2012/2013中的std::mutex实现已经使用了关键部分。只需查看VSDIR\VC\crt\thr\mutex.c

即可

您还可以使用std::mutex::native_handle()方法对此进行凭据验证,然后将返回的内容转换为CRITICAL_SECTION