我在http://preshing.com/20120305/implementing-a-recursive-mutex和http://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥锁的文章,但这两篇文章都没有感觉。
有人可以解释递归(可重入)互斥锁的工作原理吗?
(我发现解释递归互斥锁如何工作的材料很少。如果有人有很好的解释链接,我会关闭这个问题。)
谢谢 !
我在http://preshing.com/20120305/implementing-a-recursive-mutex和http://en.wikipedia.org/wiki/Reentrant_mutex上阅读了两篇关于递归(可重入)互斥锁的文章,但这两篇文章都没有感觉。
有人可以解释递归(可重入)互斥锁的工作原理吗?
(我发现解释递归互斥锁如何工作的材料很少。如果有人有很好的解释链接,我会关闭这个问题。)
谢谢 !
一种简单的方法是将标准互斥锁与以下辅助信息配对:
NULL
如果它没有被获取),以及然后,您可以通过以下方式获取互斥锁:
换句话说,如果您已经拥有互斥锁,您只需增加一个计数器,表明您现在拥有它更多。如果没有,您照常获取互斥锁。
然后,您可以通过以下方式释放互斥锁:
为了使其工作,您需要能够以线程安全的方式读取计数器和互斥体所有者。您可以通过使用辅助互斥锁来保护它,或者通过标记 counter / owner 来做到这一点volatile
。
希望这可以帮助!