4 个版本
0.2.1 | 2022年12月16日 |
---|---|
0.2.0 | 2022年12月16日 |
0.1.1 | 2022年10月20日 |
0.1.0 | 2022年10月20日 |
#858 在 并发
在 tokio-tasks 中使用
42KB
289 行
有序锁
一个 Rust 库,可以在编译时为锁分配级别,以避免死锁。
use ordered_locks::{L1, L2, Mutex, CleanLockToken};
// Create value at lock level 0, this lock cannot be acquired while a level1 lock is heldt
let v1 = Mutex::<L1, _>::new(42);
// Create value at lock level 1
let v2 = Mutex::<L2, _>::new(43);
// Construct a token indicating that this thread does not hold any locks
let mut token = unsafe {CleanLockToken::new()};
{
// We can aquire the locks for v1 and v2 at the same time
let mut g1 = v1.lock(token.token());
let (g1, token) = g1.token_split();
let mut g2 = v2.lock(token);
*g2 = 11;
*g1 = 12;
}
// Once the guards are dropped we can acquire other things
*v2.lock(token.token()) = 13;
// One cannot acquire locks in the wrong order
let mut g2 = v2.lock(token);
let (g2, token) = g2.token_split();
let mut g1 = v1.lock(token); // shouldn't compile!
*g2 = 11;
*g1 = 12;
依赖项
~0–1.1MB
~19K SLoC