#pinned #shared #mutable #access #data #mutex #pin

pinarcmutex

提供 PinArcMutex 类型,用于对固定数据的共享可变访问

2 个版本

0.1.1 2023 年 1 月 29 日
0.1.0 2023 年 1 月 29 日

#1420 in 异步

MIT/Apache

8KB

提供 PinArcMutex<T> 类型。此类型提供了一种安全的 API,用于获取对固定数据的共享可变访问。


lib.rs:

本库提供 PinArcMutex 类型,它提供了对固定状态的共享可变访问。

问题

Rust 已经提供了良好的共享可变状态解决方案 - 通常,这看起来像 Arc<Mutex<T>>。然而,有时我们还需要共享可变状态是固定的。一个例子是想要从多个线程中轮询 Stream

结果发现没有很好的方法来做这件事。基本问题是 std 和 tokio 中的 Mutex 类型没有 结构固定。不幸的是,设计一个更好的 PinnedMutex 类型也无法解决这个问题 - 实际的限制实际上在于 [Pin] 本身。具体来说,由于像 get_ref 这样的方法,Pin API 使得在没有创建 &mut T 的情况下断言 T 的固定性变得不可能,这对于互斥锁等用例来说是不利的。

替代方案

如果你的 TUnpin,你可以直接使用 Arc<tokio::Mutex<T>> 并不需要此库。

如果您不介意额外的分配,您也可以通过以下代码获取一个没有额外依赖的类似API:Arc<tokio::Mutex<Pin<Box<T>>>>

MSRV

此crate与其唯一依赖项tokio具有相同的MSRV。

依赖项

~2–3MB
~47K SLoC