From 3847825966c8d1cfaa2d5ee3eead47b708859469 Mon Sep 17 00:00:00 2001 From: tejtex Date: Sun, 22 Feb 2026 20:10:29 +0100 Subject: [PATCH 1/2] fmt --- src/traits.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traits.rs b/src/traits.rs index 6a50e17..a7faf66 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -127,7 +127,7 @@ impl ParallelRun for Vec { if threads == 0 { return Ok(Vec::new()); } - + let chunk_size = self.len().div_ceil(threads); let mut iter = self.into_iter(); From 100682f80631bbb59731ea1f5d1780643ef471b7 Mon Sep 17 00:00:00 2001 From: tejtex Date: Mon, 23 Feb 2026 17:30:31 +0100 Subject: [PATCH 2/2] feat(Runnable): added `start_with_builder` --- src/lib.rs | 22 ++++++++++++++++++++++ src/traits.rs | 12 ++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index aecfb6f..3b4b42b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -85,4 +85,26 @@ mod tests { let results = Vec::::new().par_run().unwrap(); assert!(results.is_empty()); } + + #[test] + fn test_builder() { + let task = TestTask(10); + let builder = std::thread::Builder::new().name("custom_thread".to_string()); + let handle = task.start_with_builder(builder); + assert_eq!(handle.join().unwrap(), 20); + + struct BuilderTask; + + impl Runnable for BuilderTask { + type Output = String; + + fn run(self) -> Self::Output { + std::thread::current().name().unwrap().to_string() + } + } + + let builder = std::thread::Builder::new().name("custom_thread".to_string()); + let handle = BuilderTask.start_with_builder(builder); + assert_eq!(handle.join().unwrap(), "custom_thread".to_string()); + } } diff --git a/src/traits.rs b/src/traits.rs index a7faf66..9d161b8 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -67,12 +67,24 @@ pub trait Thread: Runnable { /// assert_eq!(handle.join().unwrap(), 12); /// ``` fn start(self) -> std::thread::JoinHandle; + + /// Spawns a new thread using a custom [`std::thread::Builder`] to execute the `run` method. + fn start_with_builder( + self, + builder: std::thread::Builder, + ) -> std::thread::JoinHandle; } impl Thread for T { fn start(self) -> std::thread::JoinHandle { std::thread::spawn(move || self.run()) } + fn start_with_builder( + self, + builder: std::thread::Builder, + ) -> std::thread::JoinHandle { + builder.spawn(move || self.run()).unwrap() + } } /// An extension trait that provides a method to run multiple [`Runnable`]'s in parallel.