diff --git a/README.md b/README.md index 0c693ca7..5388ecb8 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ The [Error Handling](https://doc.rust-lang.org/stable/book/error-handling.html) The [Concurrency](https://doc.rust-lang.org/stable/book/concurrency.html) section is relevant. -- "arc1.rs" +- ["arc1.rs"](http://play.rust-lang.org/?code=%2F%2F+Make+this+code+compile+by+filling+in+a+value+for+%60shared_numbers%60+where+the%0A%2F%2F+TODO+comment+is+and+creating+an+initial+binding+for+%60child_numbers%60%0A%2F%2F+somewhere.+Try+not+to+create+any+copies+of+the+%60numbers%60+Vec%21%0A%2F%2F+Scroll+down+for+hints+%3A%29%0A%0Ause+std%3A%3Async%3A%3AArc%3B%0Ause+std%3A%3Athread%3B%0A%0Afn+main%28%29+%7B%0A++++let+numbers%3A+Vec%3C_%3E+%3D+%280..100u32%29.collect%28%29%3B%0A++++let+shared_numbers+%3D+%2F%2F+TODO%0A++++let+mut+joinhandles+%3D+Vec%3A%3Anew%28%29%3B%0A%0A++++for+offset+in+0..8+%7B%0A++++++++joinhandles.push%28%0A++++++++thread%3A%3Aspawn%28move+%7C%7C+%7B%0A++++++++++++let+mut+i+%3D+offset%3B%0A++++++++++++let+mut+sum+%3D+0%3B%0A++++++++++++while+i+%3C+child_numbers.len%28%29+%7B%0A++++++++++++++++sum+%2B%3D+child_numbers%5Bi%5D%3B%0A++++++++++++++++i+%2B%3D+5%3B%0A++++++++++++%7D%0A++++++++++++println%21%28%22Sum+of+offset+%7B%7D+is+%7B%7D%22%2C+offset%2C+sum%29%3B%0A++++++++%7D%29%29%3B%0A++++%7D%0A++++for+handle+in+joinhandles.into_iter%28%29+%7B%0A++++++++handle.join%28%29.unwrap%28%29%3B%0A++++%7D%0A%7D%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%2F%2F+Make+%60shared_numbers%60+be+an+%60Arc%60+from+the+numbers+vector.+Then%2C+in+order%0A%2F%2F+to+avoid+creating+a+copy+of+%60numbers%60%2C+you%27ll+need+to+create+%60child_numbers%60%0A%2F%2F+inside+the+loop+but+still+in+the+main+thread.%0A%0A%2F%2F+%60child_numbers%60+should+be+a+clone+of+the+Arc+of+the+numbers+instead+of+a%0A%2F%2F+thread-local+copy+of+the+numbers.%0A) ### Threads diff --git a/standard_library_types/arc1.rs b/standard_library_types/arc1.rs index f86f7211..a47dc19f 100644 --- a/standard_library_types/arc1.rs +++ b/standard_library_types/arc1.rs @@ -1,5 +1,7 @@ -// make this code compile and don't create any copies of the "numbers" Vec. -// scroll down for hints +// Make this code compile by filling in a value for `shared_numbers` where the +// TODO comment is and creating an initial binding for `child_numbers` +// somewhere. Try not to create any copies of the `numbers` Vec! +// Scroll down for hints :) use std::sync::Arc; use std::thread; @@ -9,12 +11,12 @@ fn main() { let shared_numbers = // TODO let mut joinhandles = Vec::new(); - for offset in 0..5 { + for offset in 0..8 { joinhandles.push( thread::spawn(move || { let mut i = offset; let mut sum = 0; - while i