ReadWrite 锁的性能会比传统锁差吗?

Can ReadWrite lock perform worse than conventional locks?

提问人:Stefan 提问时间:10/26/2020 更新时间:10/26/2020 访问量:152

问:

来自oracle

读写锁定是否会在使用过程中提高性能 互斥锁取决于数据的频率 读取与被修改相比,读取和写入的持续时间 操作和数据争用 - 即 将尝试同时读取或写入数据的线程。

作为一个初学者,我需要别人的帮助来帮助我解决一些事情。引号中的文本是有道理的,因为一般来说,我们为什么要让一个阅读器线程等待另一个阅读器线程?这样,使用 ,我们可以在读取器中具有并发性,并且不会在每个线程之间完全互斥ReadWriteLock

所以我想,为什么不总是用锁代替锁呢?无论我的读者是否很少,都可能出现两个读者同时尝试访问共享资源的情况。但这听起来太容易了,而且为什么那些规则会告诉我什么时候选择呢?ReadWriteLockconventionalReadWrite

有人可以告诉我我错过了什么吗?在我看来,我总是倾向于反对锁,因为尽管可能有很少的读取器/不长的操作/很少的线程争用,但仍然会出现这样一种情况,即我可以通过为读取器提供的“很少给定的并发性”来获利。ReadWriteconventional

Java 多线程并 锁定 readwritelock

评论

2赞 Andreas 10/26/2020
A 更复杂,所以如果你只使用独占锁(即写锁),一个简单的锁会(稍微)快一点,并且使用的内存更少。ReadWriteLock
2赞 Ben Manes 10/26/2020
是的,我通常会参考这篇文章来表明它不仅仅是一个“Java 的东西”。r/w 锁必须保持读取器的数量并避免写入器匮乏,这会导致管理开销。这可以使用共享原子,甚至可以使用独占锁。对于较短的关键部分,独占锁的性能会更好,而读/写锁在较长(例如 I/O)时会很有用。
0赞 Ivan 11/2/2020
并且您需要在 finally 语句中显式释放 ReadWrite 锁。

答: 暂无答案