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:
- 
Barrierneeds to know the number of threads at construction, whileWaitGroupis cloned to register more threads.
- 
A Barriercan be reused even after all threads have synchronized, while aWaitGroupsynchronizes 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§
source§impl 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();