summaryrefslogtreecommitdiffstats
path: root/04_exercise/main.c
blob: cf03191d2ffe29210d4093d3eb05343ca1bdc835 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "threadpool.h"

#include <stdio.h>
#include <stdlib.h>

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);
}

int main() {
	if (tpInit(8) != 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;
}