Struct tokio::sync::Barrier[][src]

pub struct Barrier { /* fields omitted */ }
Expand description

A barrier enables multiple threads to synchronize the beginning of some computation.

use tokio::sync::Barrier;

use futures::future::join_all;
use std::sync::Arc;

let mut handles = Vec::with_capacity(10);
let barrier = Arc::new(Barrier::new(10));
for _ in 0..10 {
    let c = barrier.clone();
    // The same messages will be printed together.
    // You will NOT see any interleaving.
    handles.push(async move {
        println!("before wait");
        let wr = c.wait().await;
        println!("after wait");
        wr
    });
}
// Will not resolve until all "before wait" messages have been printed
let wrs = join_all(handles).await;
// Exactly one barrier will resolve as the "leader"
assert_eq!(wrs.into_iter().filter(|wr| wr.is_leader()).count(), 1);

Implementations

impl Barrier[src]

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

Creates a new barrier that can block a given number of threads.

A barrier will block n-1 threads which call Barrier::wait and then wake up all threads at once when the nth thread calls wait.

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

Does not resolve until all tasks have rendezvoused here.

Barriers are re-usable after all threads have rendezvoused once, and can be used continuously.

A single (arbitrary) future will receive a BarrierWaitResult that returns true from BarrierWaitResult::is_leader when returning from this function, and all other threads will receive a result that will return false from is_leader.

Trait Implementations

impl Debug for Barrier[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

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]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.