recoverable_thread_pool/worker/impl.rs
1use super::r#struct::Worker;
2use crate::thread_pool::r#type::ThreadPoolJob;
3use recoverable_spawn::*;
4use std::{
5 sync::{Arc, Mutex, mpsc::Receiver},
6 thread::spawn,
7};
8
9/// Worker implementation for handling thread pool jobs.
10impl Worker {
11 /// Creates a new worker thread.
12 ///
13 /// # Arguments
14 ///
15 /// - `usize` - The worker identifier.
16 /// - `Arc<Mutex<Receiver<ThreadPoolJob>>>` - The shared job receiver.
17 ///
18 /// # Returns
19 ///
20 /// - `Option<Worker>` - The new worker instance.
21 pub fn new(id: usize, receiver: Arc<Mutex<Receiver<ThreadPoolJob>>>) -> Option<Worker> {
22 spawn(|| {
23 let _ = sync::recoverable_spawn(move || {
24 loop {
25 if let Ok(receiver_lock) = receiver.lock() {
26 if let Ok(job) = receiver_lock.recv() {
27 let _ = sync::recoverable_spawn(job);
28 }
29 }
30 }
31 });
32 });
33 return Some(Worker { id });
34 }
35}