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并发

Download history 214/week @ 2024-02-14 156/week @ 2024-02-21 224/week @ 2024-02-28 167/week @ 2024-03-06 185/week @ 2024-03-13 387/week @ 2024-03-20 530/week @ 2024-03-27 191/week @ 2024-04-03 217/week @ 2024-04-10 201/week @ 2024-04-17 210/week @ 2024-04-24 247/week @ 2024-05-01 208/week @ 2024-05-08 215/week @ 2024-05-15 202/week @ 2024-05-22 151/week @ 2024-05-29

826 每月下载量
用于 202 个 Crates(直接使用 3 个)

MIT 许可证

40KB
734

shared-mutex

可用于与 Condvar 一起使用的读者-写者锁。

文档

在需要大量只读访问数据的情况下,读者-写者锁可能比互斥锁更有效率,因为它们可以显著降低竞争,允许多个读者同时进行。

因此,大多数操作系统的原生库都提供了读者-写者锁实现,除了互斥锁。然而,在 Unix 系统上,这个读者-写者锁(在 std::sync::RwLock 中使用)不能与条件变量关联,这些变量仅限于原生互斥锁(在 std::sync::Mutex 中使用)。在 Windows 上,原生读者-写者锁支持在条件变量上等待,但这种功能尚未在标准库中公开。

SharedMutex 是一个没有这种(和其他)限制的读者-写者锁实现——共享互斥量保护提供等待条件变量的方法。除了这个非常有用的新 API 之外,此 crate 还提供了一些有用的组合器,如映射保护,并通过使保护类型 SendSync 来移除其他限制。

此库还提供了一些其他有用的 API,如 RawSharedMutex 和在 poison 模块中构建自己的内部 poison 类型(这些用于 SharedMutex 的实现)的实用程序。

安全性

锁定策略已从 llvm 中的 libc++ 的 std::shared_mutex 实现中改编,并具有相同的公平性和饥饿保证(读者不能饿死写者,等待的写者阻止读者)。

我已仔细审查了代码的安全性,并除了使用自动测试之外,但就像所有并发和不可安全代码一样,更多的眼睛和大脑会更好。

用法

使用 crates.io 仓库;将其添加到您的 Cargo.toml 中,以及其他依赖项

[dependencies]
shared-mutex = "0.2"

作者

Jonathan Reem 是 shared-mutex 的主要作者和维护者。

许可证

MIT

依赖项