summaryrefslogtreecommitdiff
path: root/exercises/19_smart_pointers
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-06-29 01:48:00 +0200
committermo8it <mo8it@proton.me>2024-06-29 01:48:00 +0200
commita943f5ba32412cf5b8fdd8665c1082ecab3ec545 (patch)
tree67c1821b95817ae3b25cfebb847eb20728d81d3f /exercises/19_smart_pointers
parentf3842aa746aa77a3fdf0f699951cde0d49f042c4 (diff)
arc1 solution
Diffstat (limited to 'exercises/19_smart_pointers')
-rw-r--r--exercises/19_smart_pointers/arc1.rs55
1 files changed, 29 insertions, 26 deletions
diff --git a/exercises/19_smart_pointers/arc1.rs b/exercises/19_smart_pointers/arc1.rs
index 7b31fa8..c3d714d 100644
--- a/exercises/19_smart_pointers/arc1.rs
+++ b/exercises/19_smart_pointers/arc1.rs
@@ -1,39 +1,42 @@
-// 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.
+// In this exercise, we are given a `Vec` of u32 called `numbers` with values
+// ranging from 0 to 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, ...
+// 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
-// 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!
+// Because we are using threads, our values need to be thread-safe. Therefore,
+// we are using `Arc`.
-#![forbid(unused_imports)] // Do not change this, (or the next) line.
-use std::sync::Arc;
-use std::thread;
+// Don't change the lines below.
+#![forbid(unused_imports)]
+use std::{sync::Arc, thread};
fn main() {
let numbers: Vec<_> = (0..100u32).collect();
- let shared_numbers = // TODO
- let mut joinhandles = Vec::new();
+
+ // TODO: Define `shared_numbers` by using `Arc`.
+ // let shared_numbers = ???;
+
+ let mut join_handles = Vec::new();
for offset in 0..8 {
- let child_numbers = // TODO
- joinhandles.push(thread::spawn(move || {
+ // TODO: Define `child_numbers` using `shared_numbers`.
+ // let child_numbers = ???;
+
+ let handle = thread::spawn(move || {
let sum: u32 = child_numbers.iter().filter(|&&n| n % 8 == offset).sum();
- println!("Sum of offset {} is {}", offset, sum);
- }));
+ println!("Sum of offset {offset} is {sum}");
+ });
+
+ join_handles.push(handle);
}
- for handle in joinhandles.into_iter() {
+
+ for handle in join_handles.into_iter() {
handle.join().unwrap();
}
}