Tag: reentrantreadwritelock

在同一个try块中锁定多个ReentrantReadWriteLocks是否安全?

假设我有两个关键资源,foo和bar。 我用一些ReentrantReadWriteLock保护它们 ReentrantReadWriteLock foo = new RRWL() … ReentrantReadWriteLock bar = new RRWL() … 大多数操作只使用foo OR bar,但其中一些恰巧使用两者。 现在使用单个锁时,你不能只这样做: void foo() { foo.writeLock().lock(); privateWorkOnFoo(); foo.writeLock().unlock(); } 如果抛出exception,你的foo将永远被锁定。 相反,你包装它,就像 void foo() { try { foo.writeLock().lock(); privateWorkOnFoo(); } finally { foo.writeLock().unlock(); } } 但是,如果我需要同时工作呢? 将它们放在一个块中是否安全? 选项1 try { foo.writeLock().lock(); bar.writeLock().lock(); magic(); } finally { bar.writeLock().unlock(); foo.writeLock().unlock(); } 或者是否有必要为每个锁提供自己的块: […]

ReentrantReadWriteLock,ReadLock和WriteLock之间有什么区别

我所知道的,writelock就像是同步的。 Readlock和writelock以某种方式相互影响。 ReadLock似乎不能单独工作。