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:
Brandon Macer 2021-04-21 08:50:03 -04:00 committed by GitHub
parent 79cc657917
commit 81be404487
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View file

@ -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;

View file

@ -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"