monitor
pub struct Monitor<T: Sized> { // some fields omitted }
impl<T: Sized> Monitor<T>
fn new(val: T) -> Monitor<T>
fn with_lock<U, F>(&self, f: F) -> U where F: FnOnce(MonitorGuard<T>) -> U