Expand description

Mutex guards that own the Mutex.

A standard MutexGuard requires the Mutex to live at least as long as the guard. This module contains a new guard type OwnedMutexGuard, which guarantees that an OwnedMutex stays alive until the guard is released, without any restrictions on the lifetime of the mutex.

Arc<Mutex<_>>, Rc<Mutex<_>> and Box<Mutex<_>> implement OwnedMutex.

The OwnedMutex.owned_lock function is used to create a new OwnedMutexGuard.

use std::sync::{Mutex,Arc};
use namedlock::lockresult::LockResult;
use namedlock::ownedmutexguard::{OwnedMutex,OwnedMutexGuard};

// Note the return value has a lifetime distinct from the input
fn get_locked<'a,T: Clone>(input: &T) -> LockResult<OwnedMutexGuard<'a,T,Arc<Mutex<T>>>> {
	Arc::new(Mutex::new(input.clone())).owned_lock()
}

assert_eq!([0,1,2,3,4,5,6,7,8,9],*get_locked(&[0,1,2,3,4,5,6,7,8,9]).unwrap());

License

OwnedMutexGuard - Copyright (C) 2015 Jethro G. Beekman

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Structs

An RAII implementation of a “scoped lock” of a mutex. When this structure is dropped (falls out of scope), the lock will be unlocked, and the owner of the Mutex will be dropped.

Traits

Implements the functions to obtain OwnedMutexGuards.