summaryrefslogtreecommitdiffstats
path: root/examples/21_spawn.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/21_spawn.rs')
-rw-r--r--examples/21_spawn.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/examples/21_spawn.rs b/examples/21_spawn.rs
new file mode 100644
index 0000000..770bb21
--- /dev/null
+++ b/examples/21_spawn.rs
@@ -0,0 +1,24 @@
+fn ack (m: uint, n: uint) -> uint {
+ match (m, n) {
+ (0, n) => n + 1,
+ (m, 0) => ack(m - 1, 1),
+ (m, n) => ack(m - 1, ack(m, n - 1)),
+ }
+}
+fn main () {
+ let (write, read) = channel();
+ let (m, n) = (3, 10);
+
+ spawn(proc () {
+ write.send(ack(m, n));
+ });
+
+ let mut result = read.try_recv();
+ while !result.is_ok() {
+ println!(".");
+ std::io::timer::sleep(100);
+ result = read.try_recv();
+ }
+ println!("Ack({}, {}) = {}", m, n, result.unwrap_or_else(|e| { fail!(e) }));
+}
+