2013-04-08 81 views
1

我在http://preshing.com/20120305/implementing-a-recursive-mutex以及http://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥体的文章,但这两篇文章都没有任何意义。递归(可重入)互斥锁是如何工作的?

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

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

谢谢!

回答

1

一种简单的方法来做到这一点是配对标准互斥具有以下辅助信息:

  • 一个指针到拥有互斥(或NULL如果不是获取它)的螺纹,和
  • 计数器,它最初是0

然后,您可以取得下列方式互斥:

  • 如果您是当前的互斥锁所有者,请递增计数器并立即返回。
  • 如果不是,获得互斥量和计数器设置为0。

换句话说,如果你拥有互斥体已经,你只是增加一个计数器,表明你现在拥有它,甚至更多。如果没有,你照常获得互斥体。

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

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

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

希望这会有所帮助!