2012-06-04 45 views
1

如果我有多個計算實例,嘗試獲取在同一時間同一團塊租賃獲取多重租賃,它似乎相當屢屢得手。我有這樣的印象:一旦租賃出租(並且因此被客戶收購),另一個租戶不可能同時被髮放出去?上斑點

我希望是這樣的話,我一直在使用的blob租賃作爲Azure的分佈式鎖。

回答

2

您需要閱讀這篇文章從@Smarx「Windows Azure中管理併發性租賃」得到確切的答案:

通過@Smarx:「租賃是一個鎖的分佈式相當於鎖是。很少,如果有的話,在分佈式系統中使用,因爲當組件或網絡中的分佈式系統出現故障,很容易讓整個系統死鎖的情況,租賃期限緩解這一問題,因爲有一個內置的超時時間,之後,資源將再次訪問。「

http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases

0

只要租賃被保持,另一租賃不能獲得。但是,如果不更新,租約將在一分鐘後過期。

+0

感謝您的答覆。實際上,我是使用從[github上]代碼(https://github.com/smarx/WazStorageExtensions/blob/master/AutoRenewLease.cs):在AutoRenewLease.Dispose()的方法,該租賃被手動釋放。它可能發生一個線程釋放租約,第二個線程獲得它。傳入的Action會被調用兩次。 – robertkroll

+0

我不確定我關注。你能分享一些代碼,或者更好地解釋你想做什麼?如果一個線程釋放租約,另一個線程*應該*能夠獲得它。 – smarx

+0

當然。但是,調用的動作應該只發生一次。如果兩個線程使用AutoRenewLease,它可以發生一個線程已經獲得了租約,執行的操作和發佈的租約,而在同一時間一個線程進入AutoRenewLease構造,並能夠獲得第二租約。因此,這個動作會被調用兩次,這絕不應該發生。從Dispose()方法中,我刪除了_blob.ReleaseLease()行。 – robertkroll