7 个版本
使用旧的 Rust 2015
0.3.1 | 2016 年 6 月 2 日 |
---|---|
0.3.0 | 2016 年 2 月 16 日 |
0.2.3 | 2016 年 2 月 12 日 |
0.1.0 | 2016 年 2 月 6 日 |
#1112 在 并发
826 每月下载量
用于 202 个 Crates(直接使用 3 个)
40KB
734 行
shared-mutex
可用于与 Condvar 一起使用的读者-写者锁。
文档
在需要大量只读访问数据的情况下,读者-写者锁可能比互斥锁更有效率,因为它们可以显著降低竞争,允许多个读者同时进行。
因此,大多数操作系统的原生库都提供了读者-写者锁实现,除了互斥锁。然而,在 Unix 系统上,这个读者-写者锁(在 std::sync::RwLock
中使用)不能与条件变量关联,这些变量仅限于原生互斥锁(在 std::sync::Mutex
中使用)。在 Windows 上,原生读者-写者锁支持在条件变量上等待,但这种功能尚未在标准库中公开。
SharedMutex 是一个没有这种(和其他)限制的读者-写者锁实现——共享互斥量保护提供等待条件变量的方法。除了这个非常有用的新 API 之外,此 crate 还提供了一些有用的组合器,如映射保护,并通过使保护类型 Send
和 Sync
来移除其他限制。
此库还提供了一些其他有用的 API,如 RawSharedMutex
和在 poison
模块中构建自己的内部 poison 类型(这些用于 SharedMutex
的实现)的实用程序。
安全性
锁定策略已从 llvm 中的 libc++ 的 std::shared_mutex
实现中改编,并具有相同的公平性和饥饿保证(读者不能饿死写者,等待的写者阻止读者)。
我已仔细审查了代码的安全性,并除了使用自动测试之外,但就像所有并发和不可安全代码一样,更多的眼睛和大脑会更好。
用法
使用 crates.io 仓库;将其添加到您的 Cargo.toml
中,以及其他依赖项
[dependencies]
shared-mutex = "0.2"
作者
Jonathan Reem 是 shared-mutex 的主要作者和维护者。
许可证
MIT