mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-06 15:05:19 +00:00
69 lines
1.3 KiB
C
69 lines
1.3 KiB
C
/*
|
|
* This file is copied from https://web.dev/articles/wasm-threads
|
|
*/
|
|
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
|
|
/* Calculate Fibonacci numbers shared function */
|
|
int
|
|
fibonacci(int iterations)
|
|
{
|
|
int val = 1;
|
|
int last = 0;
|
|
|
|
if (iterations == 0) {
|
|
return 0;
|
|
}
|
|
for (int i = 1; i < iterations; i++) {
|
|
int seq;
|
|
|
|
seq = val + last;
|
|
last = val;
|
|
val = seq;
|
|
}
|
|
return val;
|
|
}
|
|
|
|
int bg = 42;
|
|
|
|
/* Start function for the background thread */
|
|
void *
|
|
bg_func(void *arg)
|
|
{
|
|
int *iter = (void *)arg;
|
|
|
|
*iter = fibonacci(*iter);
|
|
printf("bg number: %d\n", *iter);
|
|
return arg;
|
|
}
|
|
|
|
/* Foreground thread and main entry point */
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int fg_val = 54;
|
|
int bg_val = 42;
|
|
pthread_t bg_thread;
|
|
|
|
/* Create the background thread */
|
|
if (pthread_create(&bg_thread, NULL, bg_func, &bg_val)) {
|
|
printf("Thread create failed");
|
|
return 1;
|
|
}
|
|
|
|
/* Calculate on the foreground thread */
|
|
fg_val = fibonacci(fg_val);
|
|
|
|
/* Wait for background thread to finish */
|
|
if (pthread_join(bg_thread, NULL)) {
|
|
printf("Thread join failed");
|
|
return 2;
|
|
}
|
|
|
|
/* Show the result from background and foreground threads */
|
|
printf("Fib(42) is %d, Fib(6 * 9) is %d\n", bg_val, fg_val);
|
|
|
|
return 0;
|
|
}
|