1个不稳定版本
使用旧的Rust 2015
0.5.0 | 2018年11月12日 |
---|
#43 in #rwlock
33KB
689 行
宽(分区)读写锁
此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