pub struct Barrier { /* private fields */ }
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();
}
RunImplementations§
source§impl Barrier
impl Barrier
sourcepub fn wait(&self) -> BarrierWaitResult
pub fn wait(&self) -> BarrierWaitResult
阻塞当前线程,直到所有线程都在此处集合为止。
所有线程集合一次后,屏障可以重新使用,并且可以连续使用。
从该函数返回时,单个 (arbitrary) 线程将接收从 BarrierWaitResult::is_leader()
返回 true
的 BarrierWaitResult
,而所有其他线程将接收从 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