use threadpool::ThreadPool; use std::sync::mpsc; pub struct Data { n: i32 } impl Data { fn incr(&mut self) { self.n += 1; } } fn main() { let n_workers = 4; let pool = ThreadPool::new(n_workers); let (tx, rx) = mpsc::channel(); let v = vec![Data{n:0}, Data{n:1}, Data{n:2}]; let n_jobs = v.len(); for mut data in v { let tx = tx.clone(); pool.execute(move || { data.incr(); tx.send(data).expect("channel will be there waiting for the pool"); }); } let sum: i32 = rx.iter().take(n_jobs).map(|data| data.n).sum(); println!("sum= {}", sum); }
sum= 6
thread poolはデフォルトの選択肢?
use threadpool::ThreadPool; use std::sync::mpsc; use std::thread; fn main() { let n_workers = 4; let pool = ThreadPool::new(n_workers); let (tx, rx) = mpsc::channel(); for i in 0..20 { let tx = tx.clone(); pool.execute(move || { // println!("{}", thread::current().name().unwrap()); tx.send(i).expect("channel will be there waiting for the pool"); }); } for i in 0..20 { let j = rx.recv().unwrap(); println!("{}", j); } }