#barrier #worker-thread #thread-pool #synchronize #deadlock #synchronization

pool_barrier

一个用于阻塞主线程,直到将工作卸载到工作线程完成,而不会阻塞工作线程的屏障

2个版本

使用旧的Rust 2015

0.1.1 2017年6月2日
0.1.0 2017年6月2日

#1018并发

MIT/Apache

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 
}

无运行时依赖