summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarol (Nichols || Goulding) <carol.nichols@gmail.com>2015-09-30 21:08:35 -0400
committerCarol (Nichols || Goulding) <carol.nichols@gmail.com>2015-09-30 21:10:26 -0400
commit7af29d6211bbc9ea1018852016fa516d4a112f41 (patch)
treeb2ff74537cf23fa85590715378c95f4e5d86b525
parent874a891592fe203d6d5f8b758a756cf53673c5ab (diff)
Incorporate Arc exercise from @ConnyOnny!! :star2:
-rw-r--r--README.md2
-rw-r--r--standard_library_types/arc1.rs19
2 files changed, 12 insertions, 9 deletions
diff --git a/README.md b/README.md
index 0c693ca..5388ecb 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 f86f721..a47dc19 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<child_numbers.len() {
+ while i < child_numbers.len() {
sum += child_numbers[i];
i += 5;
}
@@ -45,8 +47,9 @@ fn main() {
+// Make `shared_numbers` be an `Arc` from the numbers vector. Then, in order
+// to avoid creating a copy of `numbers`, you'll need to create `child_numbers`
+// inside the loop but still in the main thread.
-
-// In line 6 you must create an Arc from the numbers vector.
-// You must create the child_numbers inside the loop but still in the main thread.
-// child_numbers is a clone of the Arc of the numbers, not a copy of the numbers.
+// `child_numbers` should be a clone of the Arc of the numbers instead of a
+// thread-local copy of the numbers.