9 个版本 (4 个破坏性更改)
0.5.0 | 2022年11月30日 |
---|---|
0.4.1 | 2022年10月30日 |
0.3.1 | 2022年10月17日 |
0.2.3 | 2022年10月15日 |
0.1.0 | 2022年10月11日 |
#1060 in 并发
每月下载量 27
用于 orchidlang
18KB
259 行
Bound
一个用于封装从引用派生结构体的最小 Crates。特别适用于封装从 Arc<RwLock<T>>
获得的 LockGuard
实例,但实际上可以与任何具有类似关系的任何东西一起工作。
用法
此示例及其它所有示例也可在 https://docs.rs/bound 上找到
use std::sync::{Arc, RwLock};
use bound::Bound;
let shared = Arc::new(RwLock::new(1));
let mut writer = Bound::try_new(shared.clone(), |a| a.write()).expect("Failed to lock");
*writer = 2;
// writer now has the following type
type Writer = Bound<RwLockWriteGuard<'static, usize>, Arc<RwLock<usize>>>
现在您可以安全地传递 writer
并将其放入结构体中,这是您无法使用默认的 RwLockWriteGuard
做到的,因为它派生自对其锁的本地引用。
1.0?
1.0 表示健壮、经过验证且可用于生产。这个包是我能做的最健壮的,但它使用了 unsafe 代码,所以我希望至少有 5 位经验丰富的 Rust 开发者批准它。如果您对 unsafe 代码感到舒适并且您相信代码是安全的,请发送电子邮件给我。
一如既往,如果您找到了一种破坏它的方法,请通过可重现的示例打开一个问题。
权威批准:1