Joining threads when they fall out of scope:
extern crate drop_guard;
use drop_guard::DropGuard;
use std::thread::{spawn, sleep};
use std::time::Duration;
fn main() {
// The guard must have a name. _ will drop it instantly, which would lead to unexpected results
let _g = DropGuard::new(spawn(move || {
sleep(Duration::from_secs(2));
println!("println! from thread");
})
, |join_handle| join_handle.join().unwrap());
println!("Waiting for thread ...");
}
Feel free to run the included examples:
cargo run --example rainbow
cargo run --example thread
cargo run --example threadpool
Contributions are very welcome. Feel free to bring your own ideas or continue one of these:
- Add example/test with panic between guard and drop
- Add example/test with panic in guard closure
- Add minimal rustc version
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.