1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use std::ops::{Deref, DerefMut}; use std::sync::{Arc, Mutex}; #[derive(Clone)] pub struct ArcMutex<T> { ptr: Arc<Mutex<T>>, } impl<T> ArcMutex<T> { pub fn new(x: T) -> ArcMutex<T> { ArcMutex { ptr: Arc::new(Mutex::new(x)), } } } impl<T> Deref for ArcMutex<T> { type Target = Arc<Mutex<T>>; fn deref(&self) -> &Self::Target { &self.ptr } } impl<T> DerefMut for ArcMutex<T> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.ptr } }