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