summaryrefslogtreecommitdiffstats
path: root/examples/21_spawn.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-07-02 02:54:21 -0400
committerJesse Luehrs <doy@tozt.net>2014-07-02 02:54:21 -0400
commite620daf3b1a40ae825c625bc4328fb7d2b3ee8b6 (patch)
treefaa469408ee78623eaa8d2720dcbb36096788ca1 /examples/21_spawn.rs
downloadintro-to-rust-yapc-na-2014-master.tar.gz
intro-to-rust-yapc-na-2014-master.zip
initial commitHEADmaster
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) }));
+}
+