Incorporate Arc exercise from @ConnyOnny!! 🌟
This commit is contained in:
parent
874a891592
commit
7af29d6211
@ -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.
|
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
|
### Threads
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
// make this code compile and don't create any copies of the "numbers" Vec.
|
// Make this code compile by filling in a value for `shared_numbers` where the
|
||||||
// scroll down for hints
|
// 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::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
@ -9,12 +11,12 @@ fn main() {
|
|||||||
let shared_numbers = // TODO
|
let shared_numbers = // TODO
|
||||||
let mut joinhandles = Vec::new();
|
let mut joinhandles = Vec::new();
|
||||||
|
|
||||||
for offset in 0..5 {
|
for offset in 0..8 {
|
||||||
joinhandles.push(
|
joinhandles.push(
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
let mut i = offset;
|
let mut i = offset;
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
while i<child_numbers.len() {
|
while i < child_numbers.len() {
|
||||||
sum += child_numbers[i];
|
sum += child_numbers[i];
|
||||||
i += 5;
|
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.
|
||||||
|
|
||||||
|
// `child_numbers` should be a clone of the Arc of the numbers instead of a
|
||||||
// In line 6 you must create an Arc from the numbers vector.
|
// thread-local copy of the numbers.
|
||||||
// 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.
|
|
||||||
|
Loading…
Reference in New Issue
Block a user