recoverable_thread_pool/worker/
impl.rs

1use super::r#type::Worker;
2use crate::thread_pool::r#type::ThreadPoolJob;
3use recoverable_spawn::*;
4use std::{
5    sync::{Arc, Mutex, mpsc::Receiver},
6    thread::spawn,
7};
8
9impl Worker {
10    pub fn new(id: usize, receiver: Arc<Mutex<Receiver<ThreadPoolJob>>>) -> Option<Worker> {
11        spawn(|| {
12            let _ = sync::recoverable_spawn(move || {
13                loop {
14                    if let Ok(receiver_lock) = receiver.lock() {
15                        if let Ok(job) = receiver_lock.recv() {
16                            let _ = sync::recoverable_spawn(job);
17                        }
18                    }
19                }
20            });
21        });
22        return Some(Worker { id });
23    }
24}