diff options
| author | Mark Simulacrum <mark.simulacrum@gmail.com> | 2017-06-02 09:10:41 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-06-02 09:10:41 -0600 |
| commit | 32f418f60a1dc924a14ce8d1a6bf71c1794782cc (patch) | |
| tree | c9107723312e341fec0bc603366d5a738741e030 /src/libstd/thread | |
| parent | d7798c3d179c7c18736fc0465e7ba6618c575a34 (diff) | |
| parent | b76b9e1467f97d9f156da1773728c30ca5fd019a (diff) | |
| download | rust-32f418f60a1dc924a14ce8d1a6bf71c1794782cc.tar.gz rust-32f418f60a1dc924a14ce8d1a6bf71c1794782cc.zip | |
Rollup merge of #41981 - gamazeps:thread-detach, r=frewsxcv
[Doc] Expands `detach` documentation in `thread::JoinHande`. Part of #29378 . - Adds an example of a thread detaching. - Expands what `detaching` means. r? @steveklabnik
Diffstat (limited to 'src/libstd/thread')
| -rw-r--r-- | src/libstd/thread/mod.rs | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index d0e3b00d75f..64c31c2a681 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -1094,11 +1094,12 @@ impl<T> JoinInner<T> { /// An owned permission to join on a thread (block on its termination). /// -/// A `JoinHandle` *detaches* the child thread when it is dropped. +/// A `JoinHandle` *detaches* the associated thread when it is dropped, which +/// means that there is no longer any handle to thread and no way to `join` +/// on it. /// /// Due to platform restrictions, it is not possible to [`Clone`] this -/// handle: the ability to join a child thread is a uniquely-owned -/// permission. +/// handle: the ability to join a thread is a uniquely-owned permission. /// /// This `struct` is created by the [`thread::spawn`] function and the /// [`thread::Builder::spawn`] method. @@ -1127,6 +1128,30 @@ impl<T> JoinInner<T> { /// }).unwrap(); /// ``` /// +/// Child being detached and outliving its parent: +/// +/// ```no_run +/// use std::thread; +/// use std::time::Duration; +/// +/// let original_thread = thread::spawn(|| { +/// let _detached_thread = thread::spawn(|| { +/// // Here we sleep to make sure that the first thread returns before. +/// thread::sleep(Duration::from_millis(10)); +/// // This will be called, even though the JoinHandle is dropped. +/// println!("♫ Still alive ♫"); +/// }); +/// }); +/// +/// let _ = original_thread.join(); +/// println!("Original thread is joined."); +/// +/// // We make sure that the new thread has time to run, before the main +/// // thread returns. +/// +/// thread::sleep(Duration::from_millis(1000)); +/// ``` +/// /// [`Clone`]: ../../std/clone/trait.Clone.html /// [`thread::spawn`]: fn.spawn.html /// [`thread::Builder::spawn`]: struct.Builder.html#method.spawn |
