blob: 121d8033cc12aad45517dad39bf61c295ad1ea04 (
plain)
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
27
28
29
30
31
32
|
#pragma once
#include "common.h"
#include "deque.h"
#include "smrt_arena.h"
#include <bits/pthreadtypes.h>
#include <semaphore.h>
typedef void (*tp_job_proc)(void *args);
typedef struct {
u64 num_threads;
pthread_t *threads;
sem_t threads_running;
ts_deque_t jobs;
} thread_pool_t;
// Job queue will be allocated on the arena.
thread_pool_t tp_create(smrt_arena_t * arena ,
u64 max_jobs ,
u64 num_threads);
i32 tp_destroy(thread_pool_t tp);
i32 tp_push_job(thread_pool_t tp ,
tp_job_proc job ,
void *args);
// Wait for all threads to finish
void tp_wait(thread_pool_t tp);
|