mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-27 00:00:03 +03:00
feat(arc1): Add more details to description and hint (#710)
Co-authored-by: bmacer <bmacer@cisco.com> Co-authored-by: marisa <mokou@fastmail.com> Co-authored-by: Roberto Vidal <vidal.roberto.j@gmail.com>
This commit is contained in:
parent
79cc657917
commit
81be404487
|
@ -1,7 +1,21 @@
|
||||||
// arc1.rs
|
// arc1.rs
|
||||||
|
// In this exercise, we are given a Vec of u32 called "numbers" with values ranging
|
||||||
|
// from 0 to 99 -- [ 0, 1, 2, ..., 98, 99 ]
|
||||||
|
// We would like to use this set of numbers within 8 different threads simultaneously.
|
||||||
|
// Each thread is going to get the sum of every eighth value, with an offset.
|
||||||
|
// The first thread (offset 0), will sum 0, 8, 16, ...
|
||||||
|
// The second thread (offset 1), will sum 1, 9, 17, ...
|
||||||
|
// The third thread (offset 2), will sum 2, 10, 18, ...
|
||||||
|
// ...
|
||||||
|
// The eighth thread (offset 7), will sum 7, 15, 23, ...
|
||||||
|
|
||||||
|
// Because we are using threads, our values need to be thread-safe. Therefore,
|
||||||
|
// we are using Arc. We need to make a change in each of the two TODOs.
|
||||||
|
|
||||||
|
|
||||||
// Make this code compile by filling in a value for `shared_numbers` where the
|
// Make this code compile by filling in a value for `shared_numbers` where the
|
||||||
// TODO comment is and create an initial binding for `child_numbers`
|
// first TODO comment is, and create an initial binding for `child_numbers`
|
||||||
// somewhere. Try not to create any copies of the `numbers` Vec!
|
// where the second TODO comment is. Try not to create any copies of the `numbers` Vec!
|
||||||
// Execute `rustlings hint arc1` for hints :)
|
// Execute `rustlings hint arc1` for hints :)
|
||||||
|
|
||||||
// I AM NOT DONE
|
// I AM NOT DONE
|
||||||
|
@ -16,6 +30,7 @@ fn main() {
|
||||||
let mut joinhandles = Vec::new();
|
let mut joinhandles = Vec::new();
|
||||||
|
|
||||||
for offset in 0..8 {
|
for offset in 0..8 {
|
||||||
|
let child_numbers = // TODO
|
||||||
joinhandles.push(thread::spawn(move || {
|
joinhandles.push(thread::spawn(move || {
|
||||||
let mut i = offset;
|
let mut i = offset;
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
|
|
|
@ -679,7 +679,12 @@ to avoid creating a copy of `numbers`, you'll need to create `child_numbers`
|
||||||
inside the loop but still in the main thread.
|
inside the loop but still in the main thread.
|
||||||
|
|
||||||
`child_numbers` should be a clone of the Arc of the numbers instead of a
|
`child_numbers` should be a clone of the Arc of the numbers instead of a
|
||||||
thread-local copy of the numbers."""
|
thread-local copy of the numbers.
|
||||||
|
|
||||||
|
This is a simple exercise if you understand the underlying concepts, but if this
|
||||||
|
is too much of a struggle, consider reading through all of Chapter 16 in the book:
|
||||||
|
https://doc.rust-lang.org/stable/book/ch16-00-concurrency.html
|
||||||
|
"""
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
name = "iterators1"
|
name = "iterators1"
|
||||||
|
|
Loading…
Reference in a new issue