about summary refs log tree commit diff
path: root/src/libstd/sync
diff options
context:
space:
mode:
authorAndreas Linz <klingt.net@gmail.com>2016-03-26 14:53:27 +0100
committerAndreas Linz <klingt.net@gmail.com>2016-03-26 14:53:27 +0100
commit2eb84299ca0a23d48ab5f7e489d72708d99b1a1e (patch)
tree8510b8e25d7cea16f4c5830da6ada3445bab584f /src/libstd/sync
parentc9b6ba800aba1e4caf8548904d2957f5cfda2758 (diff)
downloadrust-2eb84299ca0a23d48ab5f7e489d72708d99b1a1e.tar.gz
rust-2eb84299ca0a23d48ab5f7e489d72708d99b1a1e.zip
Fix missing console output in `Barrier` example
The `println!` calls in the previous version were never shown (at least
not in the playpen) because the main thread is finished before all the
spawned child threads were synchronized. This commit adds a join for
each thread handle to wait in the main thread until all child threads
are finished.
Diffstat (limited to 'src/libstd/sync')
-rw-r--r--src/libstd/sync/barrier.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libstd/sync/barrier.rs b/src/libstd/sync/barrier.rs
index 4df6ca5f0b8..b543240c15a 100644
--- a/src/libstd/sync/barrier.rs
+++ b/src/libstd/sync/barrier.rs
@@ -17,16 +17,21 @@ use sync::{Mutex, Condvar};
 /// use std::sync::{Arc, Barrier};
 /// use std::thread;
 ///
+/// let mut handles = Vec::with_capacity(10);
 /// let barrier = Arc::new(Barrier::new(10));
 /// for _ in 0..10 {
 ///     let c = barrier.clone();
 ///     // The same messages will be printed together.
 ///     // You will NOT see any interleaving.
-///     thread::spawn(move|| {
+///     handles.push(thread::spawn(move|| {
 ///         println!("before wait");
 ///         c.wait();
 ///         println!("after wait");
-///     });
+///     }));
+/// }
+/// // Wait for other threads to finish.
+/// for handle in handles {
+///     handle.join().unwrap();
 /// }
 /// ```
 #[stable(feature = "rust1", since = "1.0.0")]