#include "threadpool.h" #include #include static TASK(long, fib, long) long fib(long n) { if (n <= 1) return n; fib_fut *a = fibAsync((fib_fut[]){fibFuture(n - 1)}); fib_fut *b = fibAsync((fib_fut[]){fibFuture(n - 2)}); return fibAwait(a) + fibAwait(b); } // Show this runs with only one thread and one place in the work queue int main() { setvbuf(stdout, NULL, _IONBF, 0); if (tpInit(4) != 0) perror("Thread Pool initialization failed"), exit(-1); atexit(&tpRelease); for (long i = 0; i <= 20; ++i) printf("fib(%2li) = %li\n", i, fib(i)); return 0; }