Hazelcast Trylock 和多次通话
Hazelcast Trylock and multiple calls
我运行进入以下问题:
我们有一个包含两个步骤的多部分流程 P(s1 和 s2)。
该过程已实现,在 s1 中获取了一个锁 - 但未释放。在 s2 中再次需要锁(?)并且在 s2 完成后,再次释放锁。
Locks are re-entrant: the same thread can lock multiple times on the same lock. Note that for other threads to be able to require this lock, the owner of the lock must call unlock as many times as the owner called lock.
如果我理解正确,这意味着,如果我第一次调用 s1,线程池中的线程会获取锁,比如 发送。由于请求后锁没有释放,线程回到池中。如果第二个请求进来,锁正在使用中(通过Tx)。但是如果我启动了足够多的请求,在某个时间点,我会再次从池中获取 Tx,并且我能够成功 tryLock又是和以前一样的锁?
这样对吗?这意味着,锁在其生命周期内不是独占的,或者仅在独占的情况下,它被独占绑定到一个线程。
锁有锁所有权的概念;这意味着有一个特定的线程拥有一个锁。也就是只有这个线程需要释放这个锁。
因此,线程 1 获取和线程 2 释放的用例将无法使用锁(无论是 hz 锁还是常规 j.u.c.l.ReentrantLock)。
您可能想查看 ISemaphore 并将其初始化为 1,这样您就可以创建二进制信号量。这将允许您在 1 个线程中获取 'lock' 并在另一个线程中释放 'lock'。
但是,它不会处理重入行为。但是反而会死锁。
我运行进入以下问题:
我们有一个包含两个步骤的多部分流程 P(s1 和 s2)。 该过程已实现,在 s1 中获取了一个锁 - 但未释放。在 s2 中再次需要锁(?)并且在 s2 完成后,再次释放锁。
Locks are re-entrant: the same thread can lock multiple times on the same lock. Note that for other threads to be able to require this lock, the owner of the lock must call unlock as many times as the owner called lock.
如果我理解正确,这意味着,如果我第一次调用 s1,线程池中的线程会获取锁,比如 发送。由于请求后锁没有释放,线程回到池中。如果第二个请求进来,锁正在使用中(通过Tx)。但是如果我启动了足够多的请求,在某个时间点,我会再次从池中获取 Tx,并且我能够成功 tryLock又是和以前一样的锁?
这样对吗?这意味着,锁在其生命周期内不是独占的,或者仅在独占的情况下,它被独占绑定到一个线程。
锁有锁所有权的概念;这意味着有一个特定的线程拥有一个锁。也就是只有这个线程需要释放这个锁。
因此,线程 1 获取和线程 2 释放的用例将无法使用锁(无论是 hz 锁还是常规 j.u.c.l.ReentrantLock)。
您可能想查看 ISemaphore 并将其初始化为 1,这样您就可以创建二进制信号量。这将允许您在 1 个线程中获取 'lock' 并在另一个线程中释放 'lock'。
但是,它不会处理重入行为。但是反而会死锁。