Skip to content

Commit

Permalink
feat(arc1): Add more details to description and hint (rust-lang#710)
Browse files Browse the repository at this point in the history
Co-authored-by: bmacer <[email protected]>
Co-authored-by: marisa <[email protected]>
Co-authored-by: Roberto Vidal <[email protected]>
  • Loading branch information
4 people authored Apr 21, 2021
1 parent 79cc657 commit 81be404
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
19 changes: 17 additions & 2 deletions exercises/standard_library_types/arc1.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
// 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
// TODO comment is and create an initial binding for `child_numbers`
// somewhere. Try not to create any copies of the `numbers` Vec!
// first TODO comment is, and create an initial binding for `child_numbers`
// where the second TODO comment is. Try not to create any copies of the `numbers` Vec!
// Execute `rustlings hint arc1` for hints :)

// I AM NOT DONE
Expand All @@ -16,6 +30,7 @@ fn main() {
let mut joinhandles = Vec::new();

for offset in 0..8 {
let child_numbers = // TODO
joinhandles.push(thread::spawn(move || {
let mut i = offset;
let mut sum = 0;
Expand Down
7 changes: 6 additions & 1 deletion info.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
`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]]
name = "iterators1"
Expand Down

0 comments on commit 81be404

Please sign in to comment.