#!/bin/sh cd /tmp cat <<'EOF' > /tmp/$$.rs fn main() { use std::thread::spawn; use std::sync::mpsc::channel; use std::borrow::Cow; let n = 100; let (tx, rx) = channel(); for i in 0 .. n { let tx = tx.clone(); spawn(move || { let i = i + 1; let b = match (i % 3, i % 5) { (0, 0) => Cow::Borrowed("FizzBuzz"), (0, _) => Cow::Borrowed("Fizz"), (_, 0) => Cow::Borrowed("Buzz"), _ => Cow::Owned(i.to_string()) }; tx.send((i, b)).unwrap(); }); } let mut res = Vec::new(); for _ in 0 .. n { res.push(rx.recv().unwrap()); } res.sort_by(|t, u| (&t.0).cmp(&u.0)); for t in res.iter() { println!("{}", t.1); } } EOF rustc $$.rs && ./$$