locktree 0.3.0

Experimental compiler-checked deadlock-freedom
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use locktree::locktree;

locktree! {
    Main {
        m0: Mutex<()>,
        m1: Mutex<()>,
        m2: Mutex<()>,
    }
}

fn main() {
    let locks = MainLockTree::new((), (), ());
    let (_a, mut forward_a) = locks.lock_m0();
    let (_b, mut forward_b) = forward_a.lock_m2();
    // Invalid
    let _ = forward_b.lock_m1();
}