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);
}
}