2个版本
使用旧的Rust 2015
0.1.1 | 2017年6月2日 |
---|---|
0.1.0 | 2017年6月2日 |
#1018 在 并发
13KB
212 行
pool_barrier
一个用于阻塞主线程,直到将工作卸载到工作线程完成,而不会阻塞工作线程的屏障(与 std::sync::Barrier
不同,它会阻塞所有线程)。主要用于在提交的工作项多于线程数的情况下,防止线程池死锁。
use pool_barrier::{Barrier, ActiveBarrier};
const THREADS: usize = 5;
let mut barrier = Barrier::new(THREADS);
run(barrier.activate());
run(barrier.activate()); // a barrier can be reused once checkpoints are cleared
fn run(mut barrier: ActiveBarrier){
for i in 0..THREADS{
let mut checkpoint = barrier.checkpoint();
std::thread::spawn(move||{
println!("thread_id: {}", i); // all of these occur in arbitrary order
checkpoint.check_in(); // this does not block the spawned thread
});
}
barrier.wait().unwrap(); // main thread blocks here until all checkpoints are cleared
println!("main thread"); // this occurs last
}