Type Definition concurrency_traits::mutex::FullAsyncMutex[][src]

type FullAsyncMutex<T, Q> = CustomMutex<T, RawFullAsyncMutex<Q>>;
Expand description

A mutex that can only be accessed through async await or try operations.

use std::ops::Deref;
use concurrency_traits::mutex::{FullAsyncMutex, AsyncMutex};
use std::task::{Context, Waker, Wake};
use std::sync::Arc;
use std::future::Future;
use concurrency_traits::queue::ParkQueueStd;

struct NullWaker;
impl Wake for NullWaker{
    fn wake(self:Arc<Self>) {
        println!("Wake!");
    }
}

let mut future = Box::pin(async move {
    let mutex = FullAsyncMutex::<_, ParkQueueStd<_>>::new(100usize);
    let guard = mutex.lock_async().await;
    assert_eq!(*guard.deref(), 100usize);
});

assert!(!future.as_mut().poll(&mut Context::from_waker(&Arc::new(NullWaker).into())).is_pending())