繁体   English   中英

ReentrantReadWriteLock(java)-在读取锁内嵌套写入锁

[英]ReentrantReadWriteLock (java) - nest write lock inside read lock

在下面的代码片段中,是否会导致死锁?

public class TestLocks {

ReadWriteLock lock = new ReentrantReadWriteLock();
public void add() {
    lock.readLock().lock();
    //code.....

    lock.writeLock().lock();
    //code
    lock.writeLock().unlock();

    //code....
    l.readLock().unlock();
}

我在上面做的是使用ReentrantReadWriteLock,将锁“ lock”用于读取,然后在其中再次尝试获取用于写入的锁(在释放readLock之前)。 这可能永远不会在生产中完成,但很想知道上面的代码是否会导致死锁?

public void add() {
    lock.readLock().lock();
    //code.....

    lock.writeLock().lock();
    //code
    lock.writeLock().unlock();

    //code....
    l.readLock().unlock();
}

考虑两个线程是否都运行相同的代码。 在第一行之后,它们都具有读取锁定。 现在,他们都调用writeLock 在获得写锁定之前,这两个线程都不会释放其读锁定。 但是,两个线程都无法获得写锁,直到另一个线程释放其读锁。 这样他们就可以陷入僵局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM