Struct std::sync::Barrier1.0.0[][src]

pub struct Barrier { /* fields omitted */ }
Expand description

屏障使多个线程能够同步某些计算的开始。

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);
    // 相同的消息将一起打印。
    // 您将看不到任何交错。
    handles.push(thread::spawn(move|| {
        println!("before wait");
        c.wait();
        println!("after wait");
    }));
}
// 等待其他线程完成。
for handle in handles {
    handle.join().unwrap();
}
Run

Implementations

创建一个新的屏障,该屏障可以阻止给定数量的线程。

屏障将阻塞调用 wait()n - 1 个线程,然后在第 n 个线程调用 wait() 时立即唤醒所有线程。

Examples

use std::sync::Barrier;

let barrier = Barrier::new(10);
Run

阻塞当前线程,直到所有线程都在此处集合为止。

所有线程集合一次后,屏障可以重新使用,并且可以连续使用。

从该函数返回时,单个 (arbitrary) 线程将接收从 BarrierWaitResult::is_leader() 返回 trueBarrierWaitResult,而所有其他线程将接收从 BarrierWaitResult::is_leader() 返回 false 的结果。

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);
    // 相同的消息将一起打印。
    // 您将看不到任何交错。
    handles.push(thread::spawn(move|| {
        println!("before wait");
        c.wait();
        println!("after wait");
    }));
}
// 等待其他线程完成。
for handle in handles {
    handle.join().unwrap();
}
Run

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。