Add standalone cases (#3536)
This commit is contained in:
68
tests/standalone/test-pthread/create_join.c
Normal file
68
tests/standalone/test-pthread/create_join.c
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user