extern crate sync; use sync::mutex::{Mutex,Guard}; use std::task; fn lock<'a>(l0 : &'a Mutex, l1 : &'a Mutex) -> (Guard<'a>, Guard<'a>) { loop { 't0: for _ in range(0u, 1u) { let u0 = l0.lock(); let u1 = match l1.try_lock() { None => { drop(u0); break 't0; } Some(g) => g }; return (u0, u1); } task::deschedule(); 't1: for _ in range(0u, 1u) { let u1 = l1.lock(); let u0 = match l1.try_lock() { None => { drop(u1); break 't1; } Some(g) => g }; return (u0, u1); } task::deschedule(); } } fn main() { let a = Mutex::new(); let b = Mutex::new(); let (g0, g1) = lock(&a, &b); }