recoverable_thread_pool/worker/
impl.rs

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