From cc699e1b62573fef34e2521a6ada0975e79b0459 Mon Sep 17 00:00:00 2001 From: Mara Bos Date: Tue, 4 Jan 2022 14:52:55 +0100 Subject: [PATCH] Add ScopedJoinHandle::is_running(). --- library/std/src/thread/scoped.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/library/std/src/thread/scoped.rs b/library/std/src/thread/scoped.rs index 8e9a43e05be..0b65c682c56 100644 --- a/library/std/src/thread/scoped.rs +++ b/library/std/src/thread/scoped.rs @@ -5,7 +5,7 @@ use crate::marker::PhantomData; use crate::panic::{catch_unwind, resume_unwind, AssertUnwindSafe}; use crate::sync::atomic::{AtomicUsize, Ordering}; -use crate::sync::Mutex; +use crate::sync::{Arc, Mutex}; /// TODO: documentation pub struct Scope<'env> { @@ -114,6 +114,15 @@ pub fn join(self) -> Result { pub fn thread(&self) -> &Thread { &self.0.thread } + + /// Checks if the the associated thread is still running its main function. + /// + /// This might return `false` for a brief moment after the thread's main + /// function has returned, but before the thread itself has stopped running. + #[unstable(feature = "thread_is_running", issue = "90470")] + pub fn is_running(&self) -> bool { + Arc::strong_count(&self.0.packet) > 1 + } } impl<'env> fmt::Debug for Scope<'env> {