2 个版本
使用旧的 Rust 2015
0.0.2 | 2018年7月9日 |
---|---|
0.0.1 | 2018年7月9日 |
#6 in #submission
15KB
122 代码行,不包括注释
一个同步线程池。此线程池允许只有在当前有空闲工作线程时才提交新任务。这在搜索类任务中非常有用:想象你需要以多线程方式查找某个值。一旦找到值,当然不希望提交更多搜索任务,而可能希望将工作线程用于其他事情。
示例
此示例演示了通过暴力搜索来找到平方根。通过向线程池发送搜索范围来找到根。
use sync_threadpool::ThreadPool;
use std::sync::mpsc::channel;
let n_workers = 4;
const TARGET_SQUARE: u64 = 1 << 50;
let mut pool = ThreadPool::new(n_workers);
// channel to send back results
let (tx, rx) = channel();
for start in 0..0xffff_ffff_ffff {
if let Ok(result) = rx.try_recv() {
println!("Result found: {0:x}*{0:x} = {1:x}", result, TARGET_SQUARE);
break;
}
let start = start << 16;
let end = start + 0xffff;
let range = start..end;
let tx = tx.clone();
let job = move || {
for i in range {
if i*i == TARGET_SQUARE {
tx.send(i).unwrap();
}
}
};
pool.execute(job);
}