我发现Visual Studio 2013中的std::mutex
实现速度太慢。它使用重量级互斥锁,以确保即使在完全正常和花花公子的过程之间也可以实现同步;除非你没有与其他进程交谈,否则可以真正使用CRITICAL_SECTION
加速Win32上的自旋锁定提供的额外速度。
我尝试实现符合C ++ 11互斥概念的fast_recursive_mutex
,并根据规范履行所有义务。从各方面来说,只要你没有在进程之间进行同步,它就是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
?答案 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
。