Module tokio_sync::lock [−][src]
Expand description
An asynchronous Mutex
-like type.
This module provides Lock
, a type that acts similarly to an asynchronous Mutex
, with one
major difference: the LockGuard
returned by poll_lock
is not tied to the lifetime of the
Mutex
. This enables you to acquire a lock, and then pass that guard into a future, and then
release it at some later point in time.
This allows you to do something along the lines of:
use tokio::sync::lock::{Lock, LockGuard}; struct MyType<S> { lock: Lock<S>, } impl<S> Future for MyType<S> where S: Stream<Item = u32> + Send + 'static { type Item = (); type Error = (); fn poll(&mut self) -> Poll<Self::Item, Self::Error> { match self.lock.poll_lock() { Async::Ready(mut guard) => { tokio::spawn(future::poll_fn(move || { let item = try_ready!(guard.poll().map_err(|_| ())); println!("item = {:?}", item); Ok(().into()) })); Ok(().into()) }, Async::NotReady => Ok(Async::NotReady) } } }
Structs
Lock | An asynchronous mutual exclusion primitive useful for protecting shared data |
LockGuard | A handle to a held |