【问题标题】:In Hazelcast, is it possible to use clustered locks that do _not_ care about the local thread that performs the lock/unlock operations?在 Hazelcast 中,是否可以使用不关心执行锁定/解锁操作的本地线程的集群锁?
【发布时间】:2023-03-11 17:45:01
【问题描述】:

据我了解,Hazelcast 锁(例如http://www.hazelcast.com/docs/1.9.4/manual/multi_html/ch02s07.html)的行为方式与 Java 并发原语相同,但跨集群。这使得它可以用于在本地进程以及集群上的线程之间进行同步。

但是,有什么方法可以让我退出这种行为?在我当前的项目中,我需要一种方法来协调整个集群中资源的唯一所有权,但想从我的应用程序中的多个点获取和释放这种所有权 - 我可以以某种方式做到这一点,而不涉及专用线程来管理这个锁在我的进程中?

【问题讨论】:

    标签: locking hazelcast distributed-lock


    【解决方案1】:

    信号量是你的朋友,因为它没有所有权的概念。它使用可以获得的许可证;线程 x 可以获取 permit 1,但线程 y 可以释放 permit 1。如果使用单个 permit 初始化信号量,则会获得互斥。

    ISemaphore s = hazelcastInstance.getSemaphore("foo");
    s.init(1);
    s.acquire(); 
    

    在另一个线程中,您可以通过以下方式释放此许可:

    ISemaphore s = hazelcastInstance.getSemaphore("foo");
    s.release(); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2015-02-16
      相关资源
      最近更新 更多