1e66f31c5Sopenharmony_ci#include <stdio.h> 2e66f31c5Sopenharmony_ci#include <stdlib.h> 3e66f31c5Sopenharmony_ci#include <unistd.h> 4e66f31c5Sopenharmony_ci 5e66f31c5Sopenharmony_ci#include <uv.h> 6e66f31c5Sopenharmony_ci 7e66f31c5Sopenharmony_ci#define FIB_UNTIL 25 8e66f31c5Sopenharmony_ciuv_loop_t *loop; 9e66f31c5Sopenharmony_ci 10e66f31c5Sopenharmony_cilong fib_(long t) { 11e66f31c5Sopenharmony_ci if (t == 0 || t == 1) 12e66f31c5Sopenharmony_ci return 1; 13e66f31c5Sopenharmony_ci else 14e66f31c5Sopenharmony_ci return fib_(t-1) + fib_(t-2); 15e66f31c5Sopenharmony_ci} 16e66f31c5Sopenharmony_ci 17e66f31c5Sopenharmony_civoid fib(uv_work_t *req) { 18e66f31c5Sopenharmony_ci int n = *(int *) req->data; 19e66f31c5Sopenharmony_ci if (random() % 2) 20e66f31c5Sopenharmony_ci sleep(1); 21e66f31c5Sopenharmony_ci else 22e66f31c5Sopenharmony_ci sleep(3); 23e66f31c5Sopenharmony_ci long fib = fib_(n); 24e66f31c5Sopenharmony_ci fprintf(stderr, "%dth fibonacci is %lu\n", n, fib); 25e66f31c5Sopenharmony_ci} 26e66f31c5Sopenharmony_ci 27e66f31c5Sopenharmony_civoid after_fib(uv_work_t *req, int status) { 28e66f31c5Sopenharmony_ci fprintf(stderr, "Done calculating %dth fibonacci\n", *(int *) req->data); 29e66f31c5Sopenharmony_ci} 30e66f31c5Sopenharmony_ci 31e66f31c5Sopenharmony_ciint main() { 32e66f31c5Sopenharmony_ci loop = uv_default_loop(); 33e66f31c5Sopenharmony_ci 34e66f31c5Sopenharmony_ci int data[FIB_UNTIL]; 35e66f31c5Sopenharmony_ci uv_work_t req[FIB_UNTIL]; 36e66f31c5Sopenharmony_ci int i; 37e66f31c5Sopenharmony_ci for (i = 0; i < FIB_UNTIL; i++) { 38e66f31c5Sopenharmony_ci data[i] = i; 39e66f31c5Sopenharmony_ci req[i].data = (void *) &data[i]; 40e66f31c5Sopenharmony_ci uv_queue_work(loop, &req[i], fib, after_fib); 41e66f31c5Sopenharmony_ci } 42e66f31c5Sopenharmony_ci 43e66f31c5Sopenharmony_ci return uv_run(loop, UV_RUN_DEFAULT); 44e66f31c5Sopenharmony_ci} 45