Threads2 wrong solution possible

Open
#2,200 1 comment 0 reactions 0 assignees View on GitHub

@GolakiyaVishal is already working on this.

Since Sep 24, 2026.

  • #2454 by @GolakiyaVishal — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
rust
Domain
testing

Research direction

Start by locating the threads2 exercise and the validation that accepts the expected result of 10. Reproduce the shown solution to confirm the loophole, then inspect how the solution file and output are checked. Done means the incorrect solution is rejected while a correct threads2 solution remains accepted.

Written by the indexing model from the issue text.

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);
}
Dominant language
Rust
Stars
64.6k
Forks
11.3k
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rust-lang/rustlings

All issues in rust-lang/rustlings

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.