| //@ run-pass | |
| #![allow(unused_must_use)] | |
| //@ needs-threads | |
| use std::sync::mpsc::{channel, Sender}; | |
| use std::thread; | |
| 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); | |
| } |