我读到写锁是独占的并且读锁是共享的,所以一些代码在readlock中无论如何都可以由多个线程访问。如果争用中的线程没有获取读锁定怎么办?他们只会阅读任何方式。如果线程获取一个readlock试图写一些东西呢?
由于
答案 0 :(得分:2)
对于具有读写操作的多线程代码,如果线程在读取时忽略获取锁定,则由于同时写入而导致读取不一致或垃圾数据的风险。例如,它可以读取一个长变量,就像写入长变量一样,它可以读取旧值的高一半和新值的低一半,这意味着它读取的值将是完全垃圾,某些东西那从未真正写过。
如果具有读锁定的线程在没有写入锁定的情况下写入,则可能导致其他读取线程以类似方式读取垃圾数据。
答案 1 :(得分:0)
在此处复制 @Solomon Slow 的评论,对我个人有帮助:
读锁和写锁成对出现:如果线程 R 拥有读锁,它将阻塞线程 W 获得相应的写入锁,但它不会阻塞线程 S 以获得相同的读取锁 。读取器/写入器锁对允许任意数量的读取器同时“拥有”读取锁,或者允许一个写入器拥有写入锁,但从不允许读取器和写入器同时使用,并且绝对不能同时允许一位以上的作家。
答案 2 :(得分:0)
这很有趣,因为名称“ readlock”或“ reader-lock”可能有点误导。
我发现更容易将其视为模式切换,将其切换为只读模式或仅写模式。您通过获取相应的锁来切换模式。