我读到写锁是独占的,读锁是共享的,所以在读锁中的一段代码可以被多个线程访问。如果争用中的线程没有获得读锁,该怎么办?无论如何,他们将只读。另外,如果获取读锁的线程试图写入某些内容,该怎么办?
谢谢
发布于 2015-10-28 15:09:35
在同时具有读和写的多线程代码的情况下,如果线程在读取时忽略获取锁,则会由于同时写入而冒着读取不一致或垃圾数据的风险。例如,它可以在写入long变量时读取long变量,并且可以读取旧值的上半部分和新值的下半部分,这意味着它读取的值将是完全垃圾,实际上从未写入过。
如果具有读锁的线程在没有写锁的情况下进行写操作,则可能会导致其他读线程以类似的方式读取垃圾数据。
发布于 2019-02-11 23:08:04
在这里复制@Solomon的慢评论,因为它对我个人有帮助:
读锁和写锁成对出现:如果线程R持有读锁,它会阻止线程W获得相应的写锁,但它不会阻止线程S获得相同的读锁。一个读取器/写入器锁对允许任意数量的读取器同时“拥有”读锁,或者它允许一个写入器拥有写锁,但它永远不允许一个读取器和一个写入器同时拥有,并且它永远不允许同时有多个写入器。
发布于 2019-02-21 15:39:03
这很有趣,因为"readlock“或”reader lock“这个名称可能有点误导。
我发现它更容易被认为是一个模式开关,你可以切换到只读模式,或者只写模式。您可以通过获取相应的锁来切换模式。
https://stackoverflow.com/questions/33384822
复制相似问题