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來做到這一點。

希望這會有所幫助!