about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--library/std/src/thread/scoped.rs11
1 files changed, 10 insertions, 1 deletions
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::io;
 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 @@ impl<'scope, T> ScopedJoinHandle<'scope, T> {
     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> {