31

你可以结合std::recursive_mutex,std::condition_variable意思是做这样的事情:

std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex)
some_condition_var.wait(lock);

如果不允许,那为什么不呢?

我正在使用 VC++11。

4

2 回答 2

34

你可以,如果你使用std::condition_variable_any,它允许任何类型的支持可锁定概念的对象。

但是,在递归互斥锁的情况下,您必须确保给定线程只锁定了递归互斥锁一次,因为条件变量只会在等待期间使用该unlock方法一次。unique_lock

于 2013-01-14T17:28:21.733 回答
3

您可以使用 a 来做到这一点,std::condition_variable_any它可以采用任何类型的可锁定但 plainstd::condition_variable专门用于std::unique_lock<std::mutex>.

于 2013-01-14T17:24:00.087 回答