2 个版本
| 0.1.1 | 2023 年 1 月 29 日 |
|---|---|
| 0.1.0 | 2023 年 1 月 29 日 |
#1420 in 异步
8KB
提供 PinArcMutex<T> 类型。此类型提供了一种安全的 API,用于获取对固定数据的共享可变访问。
lib.rs:
本库提供 PinArcMutex 类型,它提供了对固定状态的共享可变访问。
问题
Rust 已经提供了良好的共享可变状态解决方案 - 通常,这看起来像 Arc<Mutex<T>>。然而,有时我们还需要共享可变状态是固定的。一个例子是想要从多个线程中轮询 Stream。
结果发现没有很好的方法来做这件事。基本问题是 std 和 tokio 中的 Mutex 类型没有 结构固定。不幸的是,设计一个更好的 PinnedMutex 类型也无法解决这个问题 - 实际的限制实际上在于 [Pin] 本身。具体来说,由于像 get_ref 这样的方法,Pin API 使得在没有创建 &mut T 的情况下断言 T 的固定性变得不可能,这对于互斥锁等用例来说是不利的。
替代方案
如果你的 T 是 Unpin,你可以直接使用 Arc<tokio::Mutex<T>> 并不需要此库。
如果您不介意额外的分配,您也可以通过以下代码获取一个没有额外依赖的类似API:Arc<tokio::Mutex<Pin<Box<T>>>>。
MSRV
此crate与其唯一依赖项tokio具有相同的MSRV。
依赖项
~2–3MB
~47K SLoC