Curator InterProcessMutex 与 InterProcessSemaphoreMutex

Gli*_*ide 3 apache-zookeeper apache-curator

什么之间的区别InterProcessMutexVS InterProcessSemaphoreMutex?该文档InterProcessSemaphoreMutex是一样的 InterProcessMutex,除了它不是折返。但我不知道可重入是什么意思。

Ran*_*alt 5

我是 Apache Curator 的主要作者。无论文档可能会或可能不会说什么,为了记录,我都希望为两个类中的每一个提供确切的用例。

进程间互斥体

InterProcessMutex当您需要能够以可重入的方式锁定时应该使用。这意味着一个给定的线程一旦获得就被称为“拥有”锁,并且可以在需要时再次锁定它。如果线程将锁对象传递给其他不需要关心是否已获取锁的方法,这将非常有用。请注意,这也意味着只有拥有线程才能释放锁。下面是一个例子:

InterProcessMutex lock = new InterProcessMutex(...);

if ( !lock.acquire(...) ) ... // if acquire failed: throw, return, etc
try {
   doWork(lock);    // doWork() can safely call lock.acquire() again on the lock
} finally {
    lock.release();
}
Run Code Online (Sandbox Code Playgroud)

一旦获取,如果在与用于获取锁的线程不同的线程中释放锁,IllegalMonitorStateException则会抛出该锁。

进程间信号量互斥

InterProcessSemaphoreMutex是一种宽松版本的锁,不会记录获取它的线程。它具有更简单的语义。每个 InterProcessSemaphoreMutex 实例只能被获取一次,并且必须通过释放(在任何线程中)进行平衡。IE

InterProcessSemaphoreMutex lock = new InterProcessSemaphoreMutex(...);

lock.acquire();
lock.acquire();    // this will block forever
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。如果文档需要澄清,我们将感谢带有改进的拉取请求。