Skip to content

Commit

Permalink
Merge pull request #21020 from steveklabnik/gh20844
Browse files Browse the repository at this point in the history
Improve example in the intro.

Reviewed-by: alexcrichton
  • Loading branch information
bors committed Jan 14, 2015
2 parents 766c7d9 + e485d29 commit d8a5864
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions src/doc/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,20 +392,21 @@ Here's an example of a concurrent Rust program:
use std::thread::Thread;
fn main() {
for _ in range(0u, 10u) {
Thread::spawn(move || {
let guards: Vec<_> = (0..10).map(|_| {
Thread::scoped(|| {
println!("Hello, world!");
});
}
})
}).collect();
}
```
This program creates ten threads, who all print `Hello, world!`. The
`spawn` function takes one argument, a closure, indicated by the
double bars `||`. (The `move` keyword indicates that the closure takes
ownership of any data it uses; we'll have more on the significance of
this shortly.) This closure is executed in a new thread created by
`spawn`.
This program creates ten threads, which all print `Hello, world!`. The `scoped`
function takes one argument, a closure, indicated by the double bars `||`. This
closure is executed in a new thread created by `scoped`. The method is called
`scoped` because it returns a 'join guard', which will automatically join the
child thread when it goes out of scope. Because we `collect` these guards into
a `Vec<T>`, and that vector goes out of scope at the end of our program, our
program will wait for every thread to finish before finishing.
One common form of problem in concurrent programs is a 'data race.'
This occurs when two different threads attempt to access the same
Expand Down

0 comments on commit d8a5864

Please sign in to comment.