免责声明:
我不是很擅长Java,只是比较了C和Java之间的读/写锁,以便更好地理解这个主题和两种实现背后的决定。
There is JavaDoc about ReentrantReadWriteLock
. 它对锁的升级/降级说明如下:
它还具有以下示例,显示从读锁到写锁的手动升级:
// Here is a code sketch showing how to exploit reentrancy
// to perform lock downgrading after updating a cache
void processCachedData() {
rwl.readLock().lock();
if (!cacheValid) {
// upgrade lock manually
#1: rwl.readLock().unlock(); // must unlock first to obtain writelock
#2: rwl.writeLock().lock();
if (!cacheValid) { // recheck
...
}
...
}
use(data);
rwl.readLock().unlock();
这是否意味着上面的示例在某些情况下可能行为不正确-我的意思是行1&2之间没有锁,底层结构暴露在来自其他线程的更改中。所以它不能被认为是升级锁的正确方法,还是我错过了什么?