67 lines
1.5 KiB
Rust
67 lines
1.5 KiB
Rust
//@ 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);
|
|
}
|