#bounds #struct #reference #lock #derived #pass #guard

bound

将锁卫和其他结构体及其派生自的锁或其他数据一起,包装在一个可以传递和存储的结构体中

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

MIT 许可证

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

无运行时依赖