我读到写锁是独占的,读锁是共享的,所以读锁中的一段代码无论如何都可以被多个线程访问。如果争用中的线程没有获取读锁,该怎么办。无论如何,他们都将只读。此外,如果获取读锁的线程试图写入某些内容,该怎么办?
感谢
在同时具有读取和写入功能的多线程代码的情况下,如果线程在读取时忽略了获取锁,则有可能由于同时写入而读取不一致或垃圾数据。例如,它可以在写入一个长变量时读取该长变量,也可以读取旧值的高半部分和新值的低半部分,这意味着它读取的值将完全是垃圾,实际上从未写入过。
如果有读锁的线程在没有写锁的情况下进行写入,则可能会导致其他读线程以类似的方式读取垃圾数据。
在这里复制@Solomon Slow评论,因为它对我个人有帮助:
读锁和写锁是成对的:如果线程R持有读锁,它会阻止线程W获得相应的写锁程S获取相同的读锁。读取器/写入器锁对允许任意数量的读取器同时"拥有"读取锁,或者它允许一个写入器拥有写入锁,但它从不允许读取器和写入器同时存在,也从不允许多个写入器同时出现。
这很有趣,因为"readlock"或"reader-lock"的名称可能有点误导。
我发现更容易将其视为模式切换,即切换到只读模式或仅写模式
如果您希望此表中有一行,并且不希望在此期间更改任何单元格,则可以添加一个读锁。
其他人也能阅读,这没关系。