何时使用递归互斥锁?

新手上路,请多包涵

我了解递归互斥锁允许互斥锁多次锁定而不会陷入死锁,并且应该解锁相同的次数。但是在什么特定情况下需要使用递归互斥锁呢?我正在寻找设计/代码级别的情况。

原文由 jasonline 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 714
2 个回答

例如,当您有递归调用它的函数,并且您想要同步访问它时:

 void foo() {
   ... mutex_acquire();
   ... foo();
   ... mutex_release();
}

如果没有递归互斥锁,您必须首先创建一个“入口点”函数,当您拥有一组相互递归的函数时,这会变得很麻烦。没有递归互斥锁:

 void foo_entry() {
   mutex_acquire(); foo(); mutex_release(); }

void foo() { ... foo(); ... }

原文由 Antti Huima 发布,翻译遵循 CC BY-SA 2.5 许可协议

之前似乎没有人提到它,但是使用 recursive_mutex 的代码更容易调试,因为它的内部结构包含持有它的线程的标识符。

原文由 Cavaler 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题