【问题标题】:Locking map items with Hazelcast使用 Hazelcast 锁定地图项目
【发布时间】:2016-06-03 07:50:08
【问题描述】:

我需要同时锁定一些地图项,而没有任何其他线程拦截。我的意思是我想锁定 10 个项目,我认为我需要使用循环,但我不想在锁定第 5 个项目后被阻止锁定剩余的 5 个项目。我是否需要使用另一个独立于地图的锁来包装锁定代码块?

【问题讨论】:

    标签: hazelcast hazelcast-imap


    【解决方案1】:

    除了确保以相同的顺序锁定项目之外,我认为没有任何方法可以防止您的用例中出现潜在的死锁(我认为这是您想要防止的)。

    在您开始锁定之前,请确保您对要锁定的键应用了一些排序(例如仅使用列表和比较器的自然排序)。在这种情况下,所有锁都将以相同的顺序获取。您仍然可能会遇到这样一种情况,其中一个操作可能会获取1, 2, 3,而另一个操作将获取2, 3, 4。也就是说,第一个操作将成功获取1,但可能会在2 处被阻止。

    问题是,您的用例是什么?您可能最好使用不同的方法。如果键 ALWAYS 属于一起,则应用Data Affinity 并使用EntryProcessor 可能更有用。对于其他用例,可能仍然有更好的方法来代替使用多个锁。锁在多线程系统中通常是个坏主意,而且在高度并行的分布式系统中也不会做得更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多