1

我在http://preshing.com/20120305/implementing-a-recursive-mutexhttp://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥锁的文章,但这两篇文章都没有感觉。

有人可以解释递归(可重入)互斥锁的工作原理吗?

(我发现解释递归互斥锁如何工作的材料很少。如果有人有很好的解释链接,我会关闭这个问题。)

谢谢 !

4

1 回答 1

1

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

  • 指向拥有互斥锁的线程的指针(或者NULL如果它没有被获取),以及
  • 一个计数器,最初为 0。

然后,您可以通过以下方式获取互斥锁:

  • 如果您是当前互斥锁所有者,请增加计数器并立即返回。
  • 如果不是,则获取互斥体并将计数器设置为 0。

换句话说,如果您已经拥有互斥锁,您只需增加一个计数器,表明您现在拥有它更多。如果没有,您照常获取互斥锁。

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

  • 如果计数器非零,则递减计数器并立即返回。
  • 否则,释放互斥锁。

为了使其工作,您需要能够以线程安全的方式读取计数器和互斥体所有者。您可以通过使用辅助互斥锁来保护它,或者通过标记 counter / owner 来做到这一点volatile

希望这可以帮助!

于 2013-04-08T23:53:04.717 回答