4个版本 (破坏性更新)
0.4.0 | 2022年7月22日 |
---|---|
0.3.0 | 2022年7月22日 |
0.2.0 | 2022年7月22日 |
0.1.0 | 2022年7月22日 |
#7 在 #parking-lot
每月21次 下载
在 cachedb 中使用
14KB
305 行
锁定方法的零成本抽象
'parking_lot' 提供了许多锁定变体,包括常规阻塞锁、尝试锁定、两种形式的定时尝试锁定,以及所有这些都可以作为递归变体使用。
这导致 API 变得非常庞大,在泛型代码中调度这些变体变得相当臃肿。这个 crate 将所有不同的锁定变体抽象为单个特质,具有统一的 API,该 API 接受策略对象以调度底层锁定方法
示例
// reexports parts of parking_lot as well
use parking_method::*;
let rwlock = RwLock::new(String::from("test"));
// Note the 2 following syntax forms are equivalent
assert_eq!(*Blocking.read(&rwlock).unwrap(), "test");
assert_eq!(*ReadLockMethod::read(&Blocking, &rwlock).unwrap(), "test");
assert_eq!(*TryLock.read(&rwlock).unwrap(), "test");
let timeout = Duration::from_millis(100);
assert_eq!(
*ReadLockMethod::read(&timeout, &rwlock).unwrap(),
"test"
);
assert_eq!(
*ReadLockMethod::read(
&Recursive(Instant::now() + Duration::from_millis(100)),
&rwlock).unwrap(),
"test"
);
依赖项
~0.4–5.5MB
~11K SLoC