From: Greg Burri Date: Tue, 18 Apr 2023 13:36:25 +0000 (+0200) Subject: Simple example with spawn and join X-Git-Url: http://git.euphorik.ch/index.cgi?a=commitdiff_plain;h=1da292ca1e51d8710bdfba5e1bace3fe981cac34;p=rust_concurrent.git Simple example with spawn and join --- 1da292ca1e51d8710bdfba5e1bace3fe981cac34 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..ead8c1c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "concurrent" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..6d8c0f2 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "concurrent" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..22a0f50 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,28 @@ +use std::thread; + +fn main() { + spawn_and_join(); +} + +// Page 500. +fn spawn_and_join() { + let mut handles = Vec::>::new(); + for i in 0..10 { + let h = + thread::spawn(move || { + if i == 5 { + panic!("ERROR"); // Simulate an error. + } + println!("\nHello from thread {}", i); + i + 1 + }); + handles.push(h); + } + + for h in handles { + match h.join() { + Ok(r) => println!("\nResult: {}", r), + Err(err) => println!("\nError: {:?}", err) + } + } +} \ No newline at end of file