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}