mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // run-pass
 | |
| #![allow(unused_must_use)]
 | |
| // ignore-emscripten no threads support
 | |
| 
 | |
| use std::thread;
 | |
| use std::sync::mpsc::{channel, Sender};
 | |
| 
 | |
| pub fn main() { println!("===== WITHOUT THREADS ====="); test00(); }
 | |
| 
 | |
| fn test00_start(ch: &Sender<isize>, message: isize, count: isize) {
 | |
|     println!("Starting test00_start");
 | |
|     let mut i: isize = 0;
 | |
|     while i < count {
 | |
|         println!("Sending Message");
 | |
|         ch.send(message + 0).unwrap();
 | |
|         i = i + 1;
 | |
|     }
 | |
|     println!("Ending test00_start");
 | |
| }
 | |
| 
 | |
| fn test00() {
 | |
|     let number_of_tasks: isize = 16;
 | |
|     let number_of_messages: isize = 4;
 | |
| 
 | |
|     println!("Creating tasks");
 | |
| 
 | |
|     let (tx, rx) = channel();
 | |
| 
 | |
|     let mut i: isize = 0;
 | |
| 
 | |
|     // Create and spawn threads...
 | |
|     let mut results = Vec::new();
 | |
|     while i < number_of_tasks {
 | |
|         let tx = tx.clone();
 | |
|         results.push(thread::spawn({
 | |
|             let i = i;
 | |
|             move|| {
 | |
|                 test00_start(&tx, i, number_of_messages)
 | |
|             }
 | |
|         }));
 | |
|         i = i + 1;
 | |
|     }
 | |
| 
 | |
|     // Read from spawned threads...
 | |
|     let mut sum = 0;
 | |
|     for _r in &results {
 | |
|         i = 0;
 | |
|         while i < number_of_messages {
 | |
|             let value = rx.recv().unwrap();
 | |
|             sum += value;
 | |
|             i = i + 1;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Join spawned threads...
 | |
|     for r in results { r.join(); }
 | |
| 
 | |
|     println!("Completed: Final number is: ");
 | |
|     println!("{}", sum);
 | |
|     // assert (sum == (((number_of_threads * (number_of_threads - 1)) / 2) *
 | |
|     //       number_of_messages));
 | |
|     assert_eq!(sum, 480);
 | |
| }
 | 
