Struct crossbeam_utils::sync::WaitGroup
source · [−]pub struct WaitGroup { /* private fields */ }
Expand description
Enables threads to synchronize the beginning or end of some computation.
Wait groups vs barriers
WaitGroup
is very similar to Barrier
, but there are a few differences:
-
Barrier
needs to know the number of threads at construction, whileWaitGroup
is cloned to register more threads. -
A
Barrier
can be reused even after all threads have synchronized, while aWaitGroup
synchronizes threads only once. -
All threads wait for others to reach the
Barrier
. WithWaitGroup
, each thread can choose to either wait for other threads or to continue without blocking.
Examples
use crossbeam_utils::sync::WaitGroup;
use std::thread;
// Create a new wait group.
let wg = WaitGroup::new();
for _ in 0..4 {
// Create another reference to the wait group.
let wg = wg.clone();
thread::spawn(move || {
// Do some work.
// Drop the reference to the wait group.
drop(wg);
});
}
// Block until all threads have finished their work.
wg.wait();
Implementations
sourceimpl WaitGroup
impl WaitGroup
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new wait group and returns the single reference to it.
Examples
use crossbeam_utils::sync::WaitGroup;
let wg = WaitGroup::new();
sourcepub fn wait(self)
pub fn wait(self)
Drops this reference and waits until all other references are dropped.
Examples
use crossbeam_utils::sync::WaitGroup;
use std::thread;
let wg = WaitGroup::new();
thread::spawn({
let wg = wg.clone();
move || {
// Block until both threads have reached `wait()`.
wg.wait();
}
});
// Block until both threads have reached `wait()`.
wg.wait();
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for WaitGroup
impl Send for WaitGroup
impl Sync for WaitGroup
impl Unpin for WaitGroup
impl !UnwindSafe for WaitGroup
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more