Struct WaitGroup
struct WaitGroup { ... }
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 WaitGroup;
use thread;
// Create a new wait group.
let wg = new;
for _ in 0..4
// Block until all threads have finished their work.
wg.wait;
# sleep; // wait for background threads closed: https://github.com/rust-lang/miri/issues/1371
Implementations
impl WaitGroup
fn new() -> SelfCreates a new wait group and returns the single reference to it.
Examples
use WaitGroup; let wg = new;fn wait(self: Self)Drops this reference and waits until all other references are dropped.
Examples
use WaitGroup; use thread; let wg = new; spawn; // Block until both threads have reached `wait()`. wg.wait; # sleep; // wait for background threads closed: https://github.com/rust-lang/miri/issues/1371
impl Clone for WaitGroup
fn clone(self: &Self) -> WaitGroup
impl Debug for WaitGroup
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Default for WaitGroup
fn default() -> Self
impl Drop for WaitGroup
fn drop(self: &mut Self)
impl Freeze for WaitGroup
impl RefUnwindSafe for WaitGroup
impl Send for WaitGroup
impl Sync for WaitGroup
impl Unpin for WaitGroup
impl UnsafeUnpin for WaitGroup
impl UnwindSafe for WaitGroup
impl<T> Any for WaitGroup
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for WaitGroup
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for WaitGroup
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for WaitGroup
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for WaitGroup
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for WaitGroup
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for WaitGroup
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for WaitGroup
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for WaitGroup
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>