2012-06-04 44 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