gpt4 book ai didi

java - 什么是 ReentrantReadWriteLock 的升级/降级?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:22 25 4
gpt4 key购买 nike

什么是ReentrantReadWriteLock的升级/降级?我看到 javadoc关于升级/降级:

“锁降级:重入还允许从写锁降级为读锁,方法是获取写锁,然后获取读锁,然后释放写锁。但是,从读锁升级到写锁是不可能的。”

并提供了一个示例:

class CachedData {
Object data;
volatile boolean cacheValid;
ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();

void processCachedData() {
rwl.readLock().lock();
if (!cacheValid) {
// upgrade lock manually
rwl.readLock().unlock(); // must unlock first to obtain writelock
rwl.writeLock().lock();
if (!cacheValid) { // recheck
data = ...
cacheValid = true;
}
// downgrade lock
rwl.readLock().lock(); // reacquire read without giving up write lock
rwl.writeLock().unlock(); // unlock write, still hold read
}

use(data);
rwl.readLock().unlock();
}
}

我知道它谈到了 readLock 和 writeLock 之间的关系,但我无法从文档中获得清晰的概念。你能给我更多的解释吗?谢谢!

最佳答案

我认为,在这种情况下,“升级”和“降级”的想法是基于读者锁在某种意义上是比写者锁“更弱”的锁的想法。当获得写锁时,任何其他线程都不能以任何形式获得锁,而对于读取锁,任何其他线程都可以根据需要获得读锁。

这里,“降级”锁的意思是,如果持有写锁,可以通过获取读锁,然后释放写锁,降级为只持有读锁。这意味着你可以让一个线程开始做一些非常重要的事情(一些会阻止其他线程读取的事情),完成它的工作,然后切换到较低优先级的锁(读锁),而不是没有锁.这允许您持续持有锁而不会被抢占。

但是,另一种方法行不通——一旦持有读锁,就无法通过尝试获取写锁来“升级”到持有更重要的写锁。如果您尝试这样做,线程将一直阻塞,直到它被中断。

希望这对您有所帮助!

关于java - 什么是 ReentrantReadWriteLock 的升级/降级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5062594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com