如何获得特定的锁?

时间:2016-08-23 17:23:43

标签: azure-service-fabric

如何获取更新,独占锁定?文章states“用户可以要求更新锁而不是共享锁”但我没有找到指定锁类型的方法。

目前我有一个存储列表的字典。我的目标是:当有人只读取列表时 - 让我们拍摄快照,不要阻止任何其他人。当某人要修改列表时 - 让我们进行一次独占锁定或者更新锁定(老实说我找不到区别)并且其他人应该在事务提交之前等待,甚至读取都不可能

我无法理解的细节是:如何指定只是为了阅读,而不是允许读取集合,以及何时读取然后写入(我们无法改变现有数据)以其他方式),然后此事务应等待所有锁,然后才能成功读取和修改集合。

2 个答案:

答案 0 :(得分:2)

有一个名为LockMode的枚举,您可以在可靠的字典和队列上传递一些方法,以便您指定所需的功能。 Afaik,唯一支持它的方法是字典上的TryGetValue和ContainsKey以及队列上的TryPeek。我自己对这篇文章感到困惑,因为我最初认为我可以为每笔交易指定它(这将是非常棒的btw)。目前,您对LockMode的选择相当有限。

答案 1 :(得分:1)

这就是我在阅读和写作的同时解决我的问题的方法。

更新锁定无法正常工作,它需要独占锁定,如果您要更新相同键的项目,此时无法对集合执行任何其他操作(包括只读)。

但是可以使读取操作无锁 - 您只需要从辅助副本中读取即可。当然,在这种情况下,您可能无法获得实际数据,但它仍然比没有任何东西和TimeoutException更好。

尽管如此,同时写入同一项目的速度非常慢,如果您想要使用TimeoutException更新数据,则需要仔细考虑重试策略。