Wrt ReadWriteLock,为什么我只是想读一些东西时需要一个锁?仅当我改变变量时才使用锁定我的知识,而不是读取它以避免并发线程试图改变变量。那么为什么我们需要一个锁来阅读呢?
问问题
1578 次
2 回答
5
ReaderWriterLock 的目的是确保在您阅读它时没有其他线程改变某些内容。
锁的读取部分不是独占的(可以有多个并发读取者),除了写入部分(读取者将等待写入者,反之亦然)。
于 2013-08-12T20:28:25.623 回答
1
某些类型的对象封装了可变状态的多个方面,这些方面预期彼此之间存在某种关系。例如,aList
可能有一个Count
属性以及一堆编号的插槽。假设一个列表开始包含 100 个项目,并且一个线程试图枚举它们。在枚举线程到达第 50 项时,另一个线程尝试在第 25 项之前插入一个项。应该发生什么?
如果枚举线程在启动前获得了读锁令牌,完成后释放它,并且想要插入项目的线程首先获得了写锁令牌,则枚举线程获得了读锁令牌的事实将阻止更新线程修改列表,直到枚举完成。请注意,可以有任意数量的枚举线程同时运行而不会发生任何冲突,但在对列表进行任何更改之前,所有这些线程都必须完成(释放它们的读锁令牌)。请注意,一旦发出了写锁定令牌请求,对读锁定令牌的请求将被推迟到发出并释放写锁定令牌之后;如果不这样做,则稳定的读取请求流可能会阻止发出任何写入请求。
于 2013-08-12T20:49:48.880 回答