Struct crossbeam_utils::sync::Parker[][src]

pub struct Parker { /* fields omitted */ }

A thread parking primitive.

Conceptually, each Parker has an associated token which is initially not present:

In other words, each Parker acts a bit like a spinlock that can be locked and unlocked using park and unpark.

Examples

use std::thread;
use std::time::Duration;
use crossbeam_utils::sync::Parker;

let p = Parker::new();
let u = p.unparker().clone();

// 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.
p.park();

Implementations

impl Parker[src]

pub fn new() -> Parker[src]

Creates a new Parker.

Examples

use crossbeam_utils::sync::Parker;

let p = Parker::new();

pub fn park(&self)[src]

Blocks the current thread until the token is made available.

Examples

use crossbeam_utils::sync::Parker;

let p = Parker::new();
let u = p.unparker().clone();

// Make the token available.
u.unpark();

// Wakes up immediately and consumes the token.
p.park();

pub fn park_timeout(&self, timeout: Duration)[src]

Blocks the current thread until the token is made available, but only for a limited time.

Examples

use std::time::Duration;
use crossbeam_utils::sync::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)[src]

Blocks the current thread until the token is made available, or until a certain deadline.

Examples

use std::time::{Duration, Instant};
use crossbeam_utils::sync::Parker;

let p = Parker::new();
let deadline = Instant::now() + Duration::from_millis(500);

// Waits for the token to become available, but will not wait longer than 500 ms.
p.park_deadline(deadline);

pub fn unparker(&self) -> &Unparker[src]

Returns a reference to an associated Unparker.

The returned Unparker doesn’t have to be used by reference - it can also be cloned.

Examples

use crossbeam_utils::sync::Parker;

let p = Parker::new();
let u = p.unparker().clone();

// Make the token available.
u.unpark();
// Wakes up immediately and consumes the token.
p.park();

pub fn into_raw(this: Parker) -> *const ()[src]

Converts a Parker into a raw pointer.

Examples

use crossbeam_utils::sync::Parker;

let p = Parker::new();
let raw = Parker::into_raw(p);

pub unsafe fn from_raw(ptr: *const ()) -> Parker[src]

Converts a raw pointer into a Parker.

Safety

This method is safe to use only with pointers returned by Parker::into_raw.

Examples

use crossbeam_utils::sync::Parker;

let p = Parker::new();
let raw = Parker::into_raw(p);
let p = unsafe { Parker::from_raw(raw) };

Trait Implementations

impl Debug for Parker[src]

impl Default for Parker[src]

impl Send for Parker[src]

Auto Trait Implementations

impl !RefUnwindSafe 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.