-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Improve example in the intro. #21020
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Join guards are collected in this example to show explicitly how the things work, right? The code will behave in exactly the same way if we would just leave them out. Am I correct? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well, if you don't There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks, got it! |
||
} | ||
``` | ||
|
||
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 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With
map
this example is much nicer 😊 👍