learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    threads2.rs为什么输出有些不规律
    段树泉2024/10/15 17:43:37提问2024/10/15 17:43:37更新
      676
      // threads2.rs
      //
      // Building on the last exercise, we want all of the threads to complete their
      // work but this time the spawned threads need to be in charge of updating a
      // shared value: JobStatus.jobs_completed
      //
      // Execute `rustlings hint threads2` or use the `hint` watch subcommand for a
      // hint.
      
      // I AM NOT DONE
      #![allow(unconditional_panic)]
      use std::convert::Infallible;
      use std::marker::PhantomData;
      use std::sync::{Arc, Mutex};
      use std::thread;
      use std::time::Duration;
      
      #[repr(transparent)]
      struct JobStatus {
          jobs_completed: u32,
      }
      
      fn main() {
          let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 }));
          let mut handles = vec![];
          for i in 0..10 {
              let status_shared = Arc::clone(&status);
              let handle = thread::spawn(move || {
                  thread::sleep(Duration::from_millis(250));
                  // You must take an action before you update a shared value
                  status_shared.lock().unwrap().jobs_completed += 1;
              });
              handles.push(handle);
          }
          for handle in handles.into_iter().into_iter() {
              handle.join().unwrap();
              // Print the value of the JobStatus.jobs_completed. Did you notice
              // anything interesting in the output? Do you have to 'join' on all the
              // handles?
              println!("jobs completed {}", status.lock().unwrap().jobs_completed);
          }
      }
      

      输出:

      Progress: [############################################>---------------] 81/110

      ⠙ Running exercises/threads/threads2.rs...

      ✅ Successfully ran exercises/threads/threads2.rs!


      🎉 🎉 The code is compiling! 🎉 🎉


      Output:

      ====================

      jobs completed 5

      jobs completed 5

      jobs completed 5

      jobs completed 5

      jobs completed 5

      jobs completed 7

      jobs completed 7

      jobs completed 9

      jobs completed 9

      jobs completed 10


      ====================

      为什么这个jobs complete不是从1 开始的呢


      回答(0)
      即可发布评论
        推荐问答
          Simple Empty
          暂无数据