Compute Fibonacci numbers concurrently
- wasmedge-sys v0.7.0
- wasmedge-types v0.1.1
In this example, we will demonstrate how to use the objects and the APIs defined in to compute Fibonacci numbers concurrently.
#![allow(unused)]
fn main() {
let vm = Arc::new(Mutex::new(vm));
let handle_a = thread::spawn(move || {
let vm_child_thread = vm_cloned.lock().expect("fail to lock vm");
let returns = vm_child_thread
.run_registered_function("extern", "fib", [WasmValue::from_i32(4)])
.expect("fail to compute fib(4)");
let fib4 = returns[0].to_i32();
println!("fib(4) by child thread: {}", fib4);
fib4
});
let vm_cloned = Arc::clone(&vm);
let vm_child_thread = vm_cloned.lock().expect("fail to lock vm");
let returns = vm_child_thread
.run_registered_function("extern", "fib", [WasmValue::from_i32(5)])
.expect("fail to compute fib(5)");
let fib5 = returns[0].to_i32();
println!("fib(5) by child thread: {}", fib5);
fib5
});
let fib4 = handle_a.join().unwrap(); let fib5 = handle_b.join().unwrap(); // compute fib(6) println!("fib(6) = fib(5) + fib(1) = {}", fib5 + fib4);
fib(4) by child thread: 5 fib(5) by child thread: 8 fib(6) = fib(5) + fib(1) = 13