首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReentrantReadWriteLock: ReadLock和WriteLock有什么区别?

ReentrantReadWriteLock: ReadLock和WriteLock有什么区别?
EN

Stack Overflow用户
提问于 2013-08-21 09:57:31
回答 5查看 38.2K关注 0票数 57

我知道的是:

  • ReadLockWriteLock在某种程度上相互影响
  • WriteLock就像同步的
  • ReadLock似乎不能单独工作
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-21 10:09:56

readLock.lock();

  • 这意味着,如果任何其他线程都是写入(即持有写锁),那么在这里停止,直到没有其他线程正在写入。
  • 一旦授予锁,将不允许其他线程在释放锁之前对进行写入(即使用写锁)。

writeLock.lock();

  • 这意味着,如果任何其他线程正在读取 writing ,请在此停止,直到没有其他线程正在读取或写入为止。
  • 一旦授予锁,将不允许其他线程在释放锁之前对 read 或 will (即接受读或写锁)进行访问。

将它们组合在一起,您可以一次只安排一个线程来进行写入访问,但是,除了一个线程正在写入之外,任意多的读者都可以同时阅读。

换个说法。每次您想要从结构中读取时,都使用read锁。每次您想要时,都使用一个锁。这样,每当一次写作发生时,没有人在阅读(你可以想象你有独占的权限),但是只要没有人在写作,就可以有很多读者同时阅读。

票数 146
EN

Stack Overflow用户

发布于 2013-08-21 10:00:25

ReadWriteLock的文档说明了这一点:

ReadWriteLock维护一对关联锁,一个用于只读操作,另一个用于写入.读取锁可以由多个读取器线程同时持有,只要没有写入器。写锁是唯一的。

所以你一次可以有很多读者,但只有一个作家--而且作家也会阻止读者阅读。如果您有一些可以安全地从多个线程读取的资源,而且读取比写入更常见,但是当资源实际上不是只读的时候,这是非常有用的。(如果没有作家,而且阅读是安全的,那么根本不需要锁。)

票数 22
EN

Stack Overflow用户

发布于 2013-08-21 10:02:09

当一个线程获得一个WriteLock时,其他线程都不能获取同一个ReentrantReadWriteLock实例的ReadLockWriteLock,除非该线程释放锁。但是,多个线程可以同时获得ReadLock

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18354339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档