Lock hierarchy
This Rust crate offers debug assertions for violations of lock hierarchies. No runtime overhead or protection occurs for release builds.
Usage
use Mutex;
let mutex_a = new; // Level 0
let mutex_b = with_level; // also level 0
// Fine, first mutex in thread
let _guard_a = mutex_a.lock.unwrap;
// Must panic, lock hierarchy violation
let _guard_b = mutex_b.lock.unwrap;
use Mutex;
let mutex_a = with_level; // Level 1
let mutex_b = new; // level 0
// Fine, first mutex in thread
let _guard_a = mutex_a.lock.unwrap;
// Fine: 0 is lower level than 1
let _guard_b = mutex_b.lock.unwrap;