mirror of https://github.com/sunface/rust-course
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					33 lines
				
				990 B
			
		
		
			
		
	
	
					33 lines
				
				990 B
			| 
								 
											4 years ago
										 
									 | 
							
								// threads1.rs
							 | 
						||
| 
								 | 
							
								// Make this compile! Execute `rustlings hint threads1` for hints :)
							 | 
						||
| 
								 | 
							
								// The idea is the thread spawned on line 22 is completing jobs while the main thread is
							 | 
						||
| 
								 | 
							
								// monitoring progress until 10 jobs are completed. Because of the difference between the
							 | 
						||
| 
								 | 
							
								// spawned threads' sleep time, and the waiting threads sleep time, when you see 6 lines
							 | 
						||
| 
								 | 
							
								// of "waiting..." and the program ends without timing out when running,
							 | 
						||
| 
								 | 
							
								// you've got it :)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// I AM NOT DONE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use std::sync::Arc;
							 | 
						||
| 
								 | 
							
								use std::thread;
							 | 
						||
| 
								 | 
							
								use std::time::Duration;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct JobStatus {
							 | 
						||
| 
								 | 
							
								    jobs_completed: u32,
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fn main() {
							 | 
						||
| 
								 | 
							
								    let status = Arc::new(JobStatus { jobs_completed: 0 });
							 | 
						||
| 
								 | 
							
								    let status_shared = status.clone();
							 | 
						||
| 
								 | 
							
								    thread::spawn(move || {
							 | 
						||
| 
								 | 
							
								        for _ in 0..10 {
							 | 
						||
| 
								 | 
							
								            thread::sleep(Duration::from_millis(250));
							 | 
						||
| 
								 | 
							
								            status_shared.jobs_completed += 1;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    while status.jobs_completed < 10 {
							 | 
						||
| 
								 | 
							
								        println!("waiting... ");
							 | 
						||
| 
								 | 
							
								        thread::sleep(Duration::from_millis(500));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |