recoverable_thread_pool/worker/
impl.rs1use 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}