[−][src]Struct parking::Parker
Parks a thread.
Examples
use std::thread; use std::time::Duration; use parking::Parker; let p = Parker::new(); let u = p.unparker(); // Make the token available. u.unpark(); // Wakes up immediately and consumes the token. p.park(); thread::spawn(move || { thread::sleep(Duration::from_millis(500)); u.unpark(); }); // Wakes up when `u.unpark()` provides the token, but may also wake up // spuriously before that without consuming the token. p.park();
Implementations
impl Parker
[src]
pub fn new() -> Parker
[src]
pub fn park(&self)
[src]
Blocks the current thread until the token is made available.
This method may wake up spuriously without consuming the token, and callers should be prepared for this possibility.
Examples
use parking::Parker; let p = Parker::new(); let u = p.unparker(); // Make the token available. u.unpark(); // Wakes up immediately and consumes the token. p.park();
pub fn park_timeout(&self, timeout: Duration) -> bool
[src]
Blocks the current thread until the token is made available or the timeout is reached.
Returns true
if the token was received before the timeout.
This method may wake up spuriously without consuming the token, and callers should be prepared for this possibility.
Examples
use std::time::Duration; use parking::Parker; let p = Parker::new(); // Waits for the token to become available, but will not wait longer than 500 ms. p.park_timeout(Duration::from_millis(500));
pub fn park_deadline(&self, deadline: Instant) -> bool
[src]
Blocks the current thread until the token is made available or the deadline is reached.
Returns true
if the token was received before the deadline.
This method may wake up spuriously without consuming the token, and callers should be prepared for this possibility.
Examples
use std::time::{Duration, Instant}; use parking::Parker; let p = Parker::new(); // Waits for the token to become available, but will not wait longer than 500 ms. p.park_deadline(Instant::now() + Duration::from_millis(500));
pub fn unpark(&self)
[src]
Atomically makes the token available if it is not already.
The next time a thread blocks on this Parker
, it will wake up immediately.
Examples
use std::thread; use std::time::Duration; use parking::Parker; let p = Parker::new(); let u = p.unparker(); thread::spawn(move || { thread::sleep(Duration::from_millis(500)); u.unpark(); }); // Wakes up when `u.unpark()` provides the token, but may also wake up // spuriously before that without consuming the token. p.park();
pub fn unparker(&self) -> Unparker
[src]
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Parker
impl Send for Parker
impl !Sync for Parker
impl Unpin for Parker
impl !UnwindSafe for Parker
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,