logo

Struct std::sync::Barrier

1.0.0 · source ·
pub struct Barrier { /* private fields */ }
Expand description

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

Examples

use std::sync::{Arc, Barrier};
use std::thread;
let mut handles = Vec::with_capacity(10);
let barrier = Arc::new(Barrier::new(10));
for _ in 0..10 {
 let c = Arc::clone(&barrier);
 // The same messages will be printed together.
 // You will NOT see any interleaving.
 handles.push(thread::spawn(move|| {
 println!("before wait");
 c.wait();
 println!("after wait");
 }));
}
// Wait for other threads to finish.
for handle in handles {
 handle.join().unwrap();
}
Run

Implementations

source

impl Barrier

source

pub fn new(n: usize) -> Barrier

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

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

Examples
use std::sync::Barrier;
let barrier = Barrier::new(10);
Run
source

pub fn wait(&self) -> BarrierWaitResult

Blocks the current thread until all threads have rendezvoused here.

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

A single (arbitrary) thread 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 BarrierWaitResult::is_leader().

Examples
use std::sync::{Arc, Barrier};
use std::thread;
let mut handles = Vec::with_capacity(10);
let barrier = Arc::new(Barrier::new(10));
for _ in 0..10 {
 let c = Arc::clone(&barrier);
 // The same messages will be printed together.
 // You will NOT see any interleaving.
 handles.push(thread::spawn(move|| {
 println!("before wait");
 c.wait();
 println!("after wait");
 }));
}
// Wait for other threads to finish.
for handle in handles {
 handle.join().unwrap();
}
Run

Trait Implementations

1.16.0 · source

impl Debug for Barrier

source

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

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

source

impl<T> Any for T where
T: 'static + ?Sized,

source

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more

source

impl<T> Borrow<T> for T where
T: ?Sized,

const: unstable · source

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more

source

impl<T> BorrowMut<T> for T where
T: ?Sized,

const: unstable · source

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more

source

impl<T> From<T> for T

const: unstable · source

fn from(t: T) -> T

Returns the argument unchanged.

source

impl<T, U> Into<U> for T where
U: From<T>,

const: unstable · source

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source

impl<T, U> TryFrom<U> for T where
U: Into<T>,

type Error = Infallible

The type returned in the event of a conversion error.

const: unstable · source

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

Performs the conversion.

source

impl<T, U> TryInto<U> for T where
U: TryFrom<T>,

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

The type returned in the event of a conversion error.

const: unstable · source

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

Performs the conversion.

AltStyle によって変換されたページ (->オリジナル) /