#define ZPL_IMPLEMENTATION #define ZPL_NANO #define ZPL_ENABLE_THREADING #define ZPL_ENABLE_JOBS #include #define TEST_ENQUEUE_JOB 0.8 zpl_mutex print_mut; void calc_nums(void* data) { zpl_unused(data); i64 nums=0; zpl_random rnd={0}; zpl_random_init(&rnd); for (int i=0; i<100; ++i) { nums+=(zpl_random_gen_u64(&rnd) & 100); } //zpl_sleep_ms(50*zpl_random_range_i64(&rnd, 2, 8)); zpl_mutex_lock(&print_mut); zpl_printf("Result is: %ld\n", (long)nums); zpl_mutex_unlock(&print_mut); } int main() { zpl_random rng={0}; zpl_thread_pool p={0}; zpl_jobs_init(&p, zpl_heap(), 2); zpl_random_init(&rng); zpl_mutex_init(&print_mut); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); zpl_jobs_enqueue(&p, calc_nums, NULL); f64 time=zpl_time_now(); for (;;) { f64 now=zpl_time_now(); f64 dt =now-time; if (dt > TEST_ENQUEUE_JOB) { time=now; zpl_jobs_enqueue(&p, calc_nums, NULL); } zpl_jobs_process(&p); } return 0; }