#lock #read-write #rwlock #locking

widerwlock

适用于许多并行读者的分区读写锁

1个不稳定版本

使用旧的Rust 2015

0.5.0 2018年11月12日

#43 in #rwlock

MIT/Apache

33KB
689

宽(分区)读写锁

Latest version Documentation Minimum rustc version

此crate实现了一个企业级的读写锁,通常用于大型数据结构。该锁内部分为8部分,与std::sync::RwLock相比,它能够更好地扩展,因为可以支持更多的读者。

尽管这是一个大锁,但它在无竞争的单个读者或单个写入者锁方面比std::sync::RwLock有更好的性能特征。

该锁使用一个连续的576字节堆区域来存储其状态,因此它不是一个轻量级锁。如果你有一个包含GB级别数据的复杂数据结构,这将是一个合适的锁。

除了性能之外,该锁的另一个有趣特性是其Read->Write升级机制。ReadGuard允许升级为写锁,并原子地通知用户升级是否成功。这允许以下模式

  • 读取以检查数据结构是否处于特定状态(例如包含值)。

    • 如果没有,升级为写锁
    • 如果升级不是原子的,则再次执行(可能昂贵的)读取
    • 如果需要,则写入结构
  • 文档

使用方法

将此添加到你的Cargo.toml

[dependencies]
widerwlock = "0.5"

并添加到你的crate根目录

extern crate widerwlock;

Rust版本支持

由于使用了分配器api,最低支持的Rust版本是1.28。

依赖项

~0.6–0.9MB
~13K SLoC