#include #include //rekurzívna funkcia int F(int n) { int i, j; if(n < 2) return(1); else { //vytvorenie novej podúlohy #pragma omp task shared(i) { i = F(n-1); printf("%d-ty clen: vlakno %d\n", n-1, omp_get_thread_num()); } //vytvorenie novej podúlohy #pragma omp task shared(j) { j = F(n-2); printf("%d-ty clen: vlakno %d\n", n-2, omp_get_thread_num()); } //explicitná synchronizácia vlákien #pragma omp taskwait return(i + j); } } int main(int argc, char* argv[]) { int i; #pragma omp parallel { //začiatok paralelnej oblasti #pragma omp single nowait for(i = 0; i < 6; i++) printf("F(%d) = %d\n", i, F(i)); } //koniec paralelnej oblasti return 0; }