206得票8回答
递归锁(互斥锁)与非递归锁(互斥锁)

POSIX允许互斥锁具有递归性。这意味着同一线程可以两次锁定同一互斥锁而不会死锁。当然,它还需要两次解锁,否则没有其他线程可以获得该互斥锁。并非所有支持pthread的系统都支持递归互斥锁,但如果他们想成为POSIX兼容,他们必须支持。 其他的API(更高级别的API)通常也提供互斥锁,通常...

78得票8回答
何时使用递归互斥锁?

我理解递归互斥锁允许多次锁定互斥锁而不会导致死锁,应该解锁相同的次数。但在什么具体情况下需要使用递归互斥锁? 我正在寻找设计/代码级别的情况。

59得票3回答
类成员中的 std::mutex 与 std::recursive_mutex 的区别

我看到一些人厌恶recursive_mutex: http://www.zaval.org/resources/library/butenhof1.html 但是当考虑如何实现一个线程安全的类(受互斥保护)时,我觉得非常难以证明每个应该受互斥保护的方法都被保护,并且互斥锁最多只被锁定一次。...

56得票4回答
你如何使用POSIX线程声明递归互斥锁?

我有点困惑如何使用pthread声明递归互斥锁。 我的目标是让一次只有一个线程能够运行一段代码(包括函数),但经过怀疑后,我发现使用互斥锁不起作用,而应该使用递归互斥锁。以下是我的代码: pthread_mutex_lock(&mutex); //...

31得票2回答
你能将std::recursive_mutex和std::condition_variable结合使用吗?

您能够将std::recursive_mutex与std::condition_variable结合使用,就像这样做:std::unique_lock<std::recursive_mutex> lock(some_recursive_mutex) some_condition_v...

17得票1回答
unique_lock可以与recursive_mutex一起使用吗?

根据此文档,可以通过声明std::unique_lock<std::recursive_mutex>来使用unique_lock进行递归锁定,并且事实上这样编译是可以通过的。然而,从检查代码(gcc 4.8.2和4.9.0)中发现,unique_lock并没有使用_Mutex.lo...

7得票1回答
访问由std::recursive_mutex使用的所有者计数器

我有一个情况,我的算法的决策基于共享std::recursive_mutex的深度。 #include <iostream> #include <mutex> #include <thread> int g_i = 0; std::recursive_m...

7得票3回答
如何在同一线程上两次使用相同的互斥锁?

我有一个这样的类(已经简化): // thing.h #include <mutex> class Thing { public: void process(); void inner(); private: std::mutex lock; }; ...