1use std::{collections::VecDeque, thread};
2
3use worker_synchronizer::Synchronizer;
4
5const TARGET: u32 = 10;
6fn main() {
7 let numbers: [_; 32] = std::array::from_fn(|i| i as u32);
8 let init = (0, 0, numbers.as_slice());
9 let synchronizer = Synchronizer::new(VecDeque::from([init]));
10 thread::scope(|scope| {
11 for _ in 0..thread::available_parallelism().unwrap().get() {
12 scope.spawn(|| {
13 for ((current, selected, remaining_slice), writer) in &synchronizer {
14 use std::cmp::Ordering::*;
15 match current.cmp(&TARGET) {
16 Less => {
17 let Some((next, remaining_slice)) = remaining_slice.split_first()
18 else {
19 continue;
20 };
21 writer
22 .write_multiples([
23 (current + next, (selected << 1) + 1, remaining_slice),
24 (current, selected << 1, remaining_slice),
25 ])
26 .unwrap();
27 }
28 Equal => {
29 dbg!(current, selected, remaining_slice);
30 synchronizer.close();
31 }
32 Greater => (),
33 }
34 }
35 });
36 }
37 })
38}