【问题标题】:Can Apache curator InterProcessSemaphoreMutex release hang ever?Apache curator InterProcessSemaphoreMutex 版本可以挂起吗?
【发布时间】:2018-04-09 09:58:29
【问题描述】:

我在我们的代码中使用以下配方来确保单例 JVM 应用程序

 public void acquireLock(InterProcessSemaphoreMutex lock){
   lock.acquire();
 }

 public void releaseLock(InterProcessSemaphoreMutex lock){
      lock.release();
 }

我在两种情况下释放锁(通过上述函数调用):

  1. 工作已完成。
  2. 我从馆长那里得到了 LOST 状态更改。

对 release() 的调用是否有可能挂起?
我还应该在 releaseLock() 中添加以下谓词吗?

if (lock.isAcquiredInThisProcess()) {
    lock.release();
}

【问题讨论】:

    标签: java apache-zookeeper apache-curator


    【解决方案1】:

    (注:我是Curator的主要作者)

    如果您当前未连接(即处于暂停/丢失状态),则 lock.release() 将根据您当前的重试策略挂起。但是,它不会无限期地挂起,并且会在重试次数用尽后返回。更重要的是,Curator 内部保证与锁/信号量关联的节点将被删除,因此如果您打算释放锁/信号量,则应始终调用此方法。一旦连接被修复,节点将被删除,其他等待获取的进程可以继续。

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多