Struct async_std::sync::Barrier[][src]

pub struct Barrier { /* fields omitted */ }

A counter to synchronize multiple tasks at the same time.

Implementations

impl Barrier[src]

pub const fn new(n: usize) -> Barrier[src]

Creates a barrier that can block the given number of tasks.

A barrier will block n-1 tasks which call wait() and then wake up all tasks at once when the nth task calls wait().

Examples

use async_lock::Barrier;

let barrier = Barrier::new(5);

pub async fn wait(&'_ self) -> BarrierWaitResult[src]

Blocks the current task until all tasks reach this point.

Barriers are reusable after all tasks have synchronized, and can be used continuously.

Returns a BarrierWaitResult indicating whether this task is the “leader”, meaning the last task to call this method.

Examples

use async_lock::Barrier;
use futures_lite::future;
use std::sync::Arc;
use std::thread;

let barrier = Arc::new(Barrier::new(5));

for _ in 0..5 {
    let b = barrier.clone();
    thread::spawn(move || {
        future::block_on(async {
            // The same messages will be printed together.
            // There will NOT be interleaving of "before" and "after".
            println!("before wait");
            b.wait().await;
            println!("after wait");
        });
    });
}

Trait Implementations

impl Debug for Barrier[src]

Auto Trait Implementations

impl !RefUnwindSafe for Barrier

impl Send for Barrier

impl Sync for Barrier

impl Unpin for Barrier

impl UnwindSafe for Barrier

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.