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, while WaitGroup is cloned to register more threads.

  • A Barrier can be reused even after all threads have synchronized, while a WaitGroup synchronizes threads only once.

  • All threads wait for others to reach the Barrier. With WaitGroup, 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§

Creates a new wait group and returns the single reference to it.

Examples
use crossbeam_utils::sync::WaitGroup;

let wg = WaitGroup::new();

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§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.