[][src]Struct parking::Parker

pub struct Parker { /* fields omitted */ }

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]

Creates a new Parker.

Examples

use parking::Parker;

let p = Parker::new();

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]

Returns a handle for unparking.

The returned Unparker handle can be cloned and shared among threads.

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();

Trait Implementations

impl Debug for Parker[src]

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]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.