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