Java可扩展的读写锁 - puzpuzpuz


锁或互斥体(互斥)是最基本的并发原语之一。很难找到一个无法解释互斥锁的开发人员,至少在基本层面上是这样。然而,互斥锁远不止这些。他们可能是:

  • 操作系统级(想想,一个 pthread 互斥锁)或用户级(想想,一个自旋锁),
  • 公开悲观(阻塞)或乐观(非阻塞)锁定 API,
  • 提供锁获取的公平性或保持不公平,
  • 支持可重入调用,或者更喜欢不可重入,
  • 具有锁定不对称的概念(例如,使用可供读者使用的共享锁)或坚持对称的排他锁定,
  • 严格要求在同一个线程上解锁(再次是 pthread 互斥锁),或者不想打扰解锁者的身份(sync.Mutex在 Golang 中),
  • 支持锁定尝试的基于时间的取消或仅具有不可中止的调用。

今天,我们专注于大多数 Java 开发人员熟悉的非对称读写锁。这样的锁允许并发读者继续执行他们的临界区,而写者保证获得锁的独占所有权。这些锁用于绝大多数调用来自读取器并且写入器很少获取锁的场景。

我们的最终目标是提出一个锁实现,它可以根据 CPU 核心数线性扩展读取器操作,并将结果与 ReentrantReadWriteLock​​标准库中的类等替代方案进行比较。

详细点击标题