gpt4 book ai didi

java - ReentrantReadWriteLock - 为什么读者不能获得作者的锁?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:00 33 4
gpt4 key购买 nike

ReentrantReadWriteLock 文档中说:

writer can acquire the read lock, but not vice-versa

如果我理解正确,这意味着您可以从同一个线程执行:

//thread1
lock.writeLock().lock()
lock.readLock().lock()
print("this line executes")

这是有道理的:如果您已经锁定write,则其他线程无法输入锁定的代码。但是,如果您锁定了read,为什么在没有其他线程锁定read 的情况下,您不能在同一线程中进入write block ?所以这是行不通的:

//thread1
lock.readLock().lock()
lock.writeLock().lock()
print("this line doesn't execute")

为什么在同一线程中锁定write之前必须先解锁read

最佳答案

ReentrantReadWriteLock 并不意味着不遵循正常的锁定规则。

如果一个线程为了读取目的获取了一个锁,它期望目标数据的值在锁期间不会改变。否则会阻止可重复读取。从概念上讲,如果您让一个线程(同一个或另一个)在读锁失效时获取写锁,那么您就违反了该规则。

如果一个线程获得了一个写锁,它隐含地也有读权限,所以获得一个读锁是可以被授予的,因为它并没有真正违反锁的约定(如果我可以写,我可以读),也不是锁持有者的期望(我为写而锁定,所以我现在是唯一可以读或写的人)。

关于java - ReentrantReadWriteLock - 为什么读者不能获得作者的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43099144/

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