#lock #mutex #smart #async #reference-counting

slock

一个不会发生死锁的异步互斥锁

5 个版本

0.2.1 2022年11月27日
0.2.0 2022年11月27日
0.1.2 2020年6月5日
0.1.1 2020年6月2日
0.1.0 2020年6月2日

992并发 分类中

每月下载量 29

MIT 许可协议

10KB
136 行(不包括注释)

Slock

Slock 是一个不会发生死锁的 Rust 互斥锁。

Slock,或称为智能锁,是一个围绕原子引用计数的读写锁的智能包装。

所有访问和修改都以封装的方式进行。这确保了线程在进行 Slock 操作时不会发生死锁。

// Create a new lock with an initial value
let lock = Slock::new(5i32);

// Change the lock's value
lock.set(|v| v + 1).await;

// Get the lock's value if Copy
let value = lock.get().await;
// Get the lock's value if Clone
let value = lock.get_clone().await;

assert_eq!(value, 6);

还可以从较大的结构中提取所需的数据,而不需要克隆整个结构。

struct User {
    name: String,
    age: i32,
}

let user = Slock::new(User {
    name: "Bob",
    age: 32,
});

// Extract something that is Copy
let age = user.map(|v| v.age).await;

// Extract something that is Clone
let name = user.map(|v| v.name.clone()).await;

// Increment `age` by 1
user.set(|v| v.age += 1).await;

依赖项

~2.3–4MB
~63K 行(额外的代码行数)