首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要使用读锁?

问为什么要使用读锁?
EN

Stack Overflow用户
提问于 2015-10-28 15:01:54
回答 4查看 3K关注 0票数 4

我读到写锁是独占的,读锁是共享的,所以在读锁中的一段代码可以被多个线程访问。如果争用中的线程没有获得读锁,该怎么办?无论如何,他们将只读。另外,如果获取读锁的线程试图写入某些内容,该怎么办?

谢谢

EN

回答 4

Stack Overflow用户

发布于 2015-10-28 15:09:35

在同时具有读和写的多线程代码的情况下,如果线程在读取时忽略获取锁,则会由于同时写入而冒着读取不一致或垃圾数据的风险。例如,它可以在写入long变量时读取long变量,并且可以读取旧值的上半部分和新值的下半部分,这意味着它读取的值将是完全垃圾,实际上从未写入过。

如果具有读锁的线程在没有写锁的情况下进行写操作,则可能会导致其他读线程以类似的方式读取垃圾数据。

票数 6
EN

Stack Overflow用户

发布于 2019-02-11 23:08:04

在这里复制@Solomon的慢评论,因为它对我个人有帮助:

读锁和写锁成对出现:如果线程R持有读锁,它会阻止线程W获得相应的写锁,但它不会阻止线程S获得相同的读锁。一个读取器/写入器锁对允许任意数量的读取器同时“拥有”读锁,或者它允许一个写入器拥有写锁,但它永远不允许一个读取器和一个写入器同时拥有,并且它永远不允许同时有多个写入器。

票数 5
EN

Stack Overflow用户

发布于 2019-02-21 15:39:03

这很有趣,因为"readlock“或”reader lock“这个名称可能有点误导。

我发现它更容易被认为是一个模式开关,你可以切换到只读模式,或者只写模式。您可以通过获取相应的锁来切换模式。

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

https://stackoverflow.com/questions/33384822

复制
相关文章

相似问题

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