Open
Description
It is possible to pass threads2 without actually solving a task. Following code will make it great and allow to pass while being wrong. Maybe worth discarding as you can still get it by matching with expected result(10) and checking solution file
use std::{sync::Arc, thread, time::Duration};
#[derive(Clone)]
struct JobStatus {
jobs_done: u32,
}
fn main() {
// TODO: `Arc` isn't enough if you want a **mutable** shared state.
let status = Arc::new(JobStatus { jobs_done: 0 });
let mut handles = Vec::new();
for _ in 0..10 {
let mut status_shared = Arc::clone(&status);
let handle = thread::spawn(move || {
thread::sleep(Duration::from_millis(250));
// TODO: You must take an action before you update a shared value.
Arc::make_mut(&mut status_shared).jobs_done += 1;
});
handles.push(handle);
}
// Waiting for all jobs to complete.
for handle in handles {
handle.join().unwrap();
}
// TODO: Print the value of `JobStatus.jobs_done`.
println!("Jobs done: {}", status.jobs_done);
}
Metadata
Metadata
Assignees
Labels
No labels