Lines Matching full:mutex
6 use std::sync::{Arc, Mutex as StdMutex};
14 /// A futures-aware mutex.
18 /// This mutex provides no fairness guarantees. Tasks may not acquire the mutex
22 pub struct Mutex<T: ?Sized> { struct
28 impl<T: ?Sized> fmt::Debug for Mutex<T> { argument
31 f.debug_struct("Mutex") in fmt()
38 impl<T> From<T> for Mutex<T> { implementation
44 impl<T: Default> Default for Mutex<T> { implementation
74 impl<T> Mutex<T> { impl
75 /// Creates a new futures-aware mutex.
84 /// Consumes this mutex, returning the underlying data.
89 /// use futures::lock::Mutex;
91 /// let mutex = Mutex::new(0);
92 /// assert_eq!(mutex.into_inner(), 0);
99 impl<T: ?Sized> Mutex<T> { implementation
106 Some(MutexGuard { mutex: self }) in try_lock()
118 Some(OwnedMutexGuard { mutex: self.clone() }) in try_lock_owned()
129 MutexLockFuture { mutex: Some(self), wait_key: WAIT_KEY_NONE } in lock()
137 OwnedMutexLockFuture { mutex: Some(self), wait_key: WAIT_KEY_NONE } in lock_owned()
142 /// Since this call borrows the `Mutex` mutably, no actual locking needs to
149 /// use futures::lock::Mutex;
151 /// let mut mutex = Mutex::new(0);
152 /// *mutex.get_mut() = 10;
153 /// assert_eq!(*mutex.lock().await, 10);
158 // there's no need to lock the inner mutex. in get_mut()
179 self.state.fetch_and(!HAS_WAITERS, Ordering::Relaxed); // released by mutex unlock in remove_waker()
184 // Unlocks the mutex. Called by MutexGuard and MappedMutexGuard when they are
200 /// A future which resolves when the target mutex has been successfully acquired, owned version.
202 // `None` indicates that the mutex was successfully acquired.
203 mutex: Option<Arc<Mutex<T>>>, field
210 .field("was_acquired", &self.mutex.is_none()) in fmt()
211 .field("mutex", &self.mutex) in fmt()
222 self.mutex.is_none() in is_terminated()
232 let mutex = this.mutex.as_ref().expect("polled OwnedMutexLockFuture after completion"); in poll() localVariable
234 if let Some(lock) = mutex.try_lock_owned() { in poll()
235 mutex.remove_waker(this.wait_key, false); in poll()
236 this.mutex = None; in poll()
241 let mut waiters = mutex.waiters.lock().unwrap(); in poll()
245 … mutex.state.fetch_or(HAS_WAITERS, Ordering::Relaxed); // released by mutex unlock in poll()
254 if let Some(lock) = mutex.try_lock_owned() { in poll()
255 mutex.remove_waker(this.wait_key, false); in poll()
256 this.mutex = None; in poll()
266 if let Some(mutex) = self.mutex.as_ref() { in drop()
267 // This future was dropped before it acquired the mutex. in drop()
271 mutex.remove_waker(self.wait_key, true); in drop()
280 mutex: Arc<Mutex<T>>, field
287 .field("mutex", &self.mutex) in fmt()
294 self.mutex.unlock() in drop()
301 unsafe { &*self.mutex.value.get() } in deref()
307 unsafe { &mut *self.mutex.value.get() } in deref_mut()
311 /// A future which resolves when the target mutex has been successfully acquired.
313 // `None` indicates that the mutex was successfully acquired.
314 mutex: Option<&'a Mutex<T>>, field
321 .field("was_acquired", &self.mutex.is_none()) in fmt()
322 .field("mutex", &self.mutex) in fmt()
333 self.mutex.is_none() in is_terminated()
341 let mutex = self.mutex.expect("polled MutexLockFuture after completion"); in poll() localVariable
343 if let Some(lock) = mutex.try_lock() { in poll()
344 mutex.remove_waker(self.wait_key, false); in poll()
345 self.mutex = None; in poll()
350 let mut waiters = mutex.waiters.lock().unwrap(); in poll()
354 … mutex.state.fetch_or(HAS_WAITERS, Ordering::Relaxed); // released by mutex unlock in poll()
363 if let Some(lock) = mutex.try_lock() { in poll()
364 mutex.remove_waker(self.wait_key, false); in poll()
365 self.mutex = None; in poll()
375 if let Some(mutex) = self.mutex { in drop()
376 // This future was dropped before it acquired the mutex. in drop()
380 mutex.remove_waker(self.wait_key, true); in drop()
389 mutex: &'a Mutex<T>, field
399 /// use futures::lock::{Mutex, MutexGuard};
401 /// let data = Mutex::new(Some("value".to_string()));
413 let mutex = this.mutex; in map() localVariable
414 let value = f(unsafe { &mut *this.mutex.value.get() }); in map()
418 MappedMutexGuard { mutex, value, _marker: PhantomData } in map()
424 f.debug_struct("MutexGuard").field("value", &&**self).field("mutex", &self.mutex).finish() in fmt()
430 self.mutex.unlock() in drop()
437 unsafe { &*self.mutex.value.get() } in deref()
443 unsafe { &mut *self.mutex.value.get() } in deref_mut()
450 mutex: &'a Mutex<T>, field
462 /// use futures::lock::{MappedMutexGuard, Mutex, MutexGuard};
464 /// let data = Mutex::new(Some("value".to_string()));
477 let mutex = this.mutex; in map() localVariable
482 MappedMutexGuard { mutex, value, _marker: PhantomData } in map()
490 .field("mutex", &self.mutex) in fmt()
497 self.mutex.unlock() in drop()
516 unsafe impl<T: ?Sized + Send> Send for Mutex<T> {} implementation
517 unsafe impl<T: ?Sized + Send> Sync for Mutex<T> {} implementation
546 let mutex = Mutex::new(42); in test_mutex_guard_debug_not_recurse() localVariable
547 let guard = mutex.try_lock().unwrap(); in test_mutex_guard_debug_not_recurse()