Multithreading 递归(可重入)互斥如何工作?

Multithreading 递归(可重入)互斥如何工作?,multithreading,thread-safety,mutex,recursive-mutex,Multithreading,Thread Safety,Mutex,Recursive Mutex,我在上读了两篇关于递归(可重入)互斥体的文章,但这两篇文章都没有任何意义 有人能解释一下递归(可重入)互斥是如何工作的吗 (我发现很少有资料解释递归互斥是如何工作的。如果有人有好的解释,我将结束这个问题。) 谢谢 一种简单的方法是将标准互斥体与以下辅助信息配对: 指向拥有互斥锁的线程的指针(如果未获取,则为NULL),以及 一个计数器,最初为0 然后,您可以通过以下方式获取互斥: 如果您是当前互斥锁的所有者,请增加计数器并立即返回 如果不是,则获取互斥并将计数器设置为0 换句话说,如果您

我在上读了两篇关于递归(可重入)互斥体的文章,但这两篇文章都没有任何意义

有人能解释一下递归(可重入)互斥是如何工作的吗

(我发现很少有资料解释递归互斥是如何工作的。如果有人有好的解释,我将结束这个问题。)


谢谢

一种简单的方法是将标准互斥体与以下辅助信息配对:

  • 指向拥有互斥锁的线程的指针(如果未获取,则为
    NULL
    ),以及
  • 一个计数器,最初为0
然后,您可以通过以下方式获取互斥:

  • 如果您是当前互斥锁的所有者,请增加计数器并立即返回
  • 如果不是,则获取互斥并将计数器设置为0
换句话说,如果您已经拥有互斥体,那么只需增加一个计数器,指示您现在拥有它更多。如果没有,则像往常一样获取互斥

然后,可以通过以下方式释放互斥锁:

  • 如果计数器非零,则减小计数器并立即返回
  • 否则,释放互斥锁
为了使其工作,您需要能够以线程安全的方式读取计数器和互斥锁所有者。您可以使用辅助互斥来保护它,也可以将计数器/所有者标记为volatile


希望这有帮助

一种简单的方法是将标准互斥体与以下辅助信息配对:

  • 指向拥有互斥锁的线程的指针(如果未获取,则为
    NULL
    ),以及
  • 一个计数器,最初为0
然后,您可以通过以下方式获取互斥:

  • 如果您是当前互斥锁的所有者,请增加计数器并立即返回
  • 如果不是,则获取互斥并将计数器设置为0
换句话说,如果您已经拥有互斥体,那么只需增加一个计数器,指示您现在拥有它更多。如果没有,则像往常一样获取互斥

然后,可以通过以下方式释放互斥锁:

  • 如果计数器非零,则减小计数器并立即返回
  • 否则,释放互斥锁
为了使其工作,您需要能够以线程安全的方式读取计数器和互斥锁所有者。您可以使用辅助互斥来保护它,也可以将计数器/所有者标记为volatile

希望这有帮助