htils 1
A small set of utilities for C programming.
Loading...
Searching...
No Matches
worker.h
Go to the documentation of this file.
1#ifndef HTILS_WORKER_H
2#define HTILS_WORKER_H
3
4#ifndef HTILS_THREAD_SAFE
5#error "htils workers are only available on thread-safe builds of htils"
6#else
7
8/***********************************/
9
10#include <stdatomic.h>
11#include <threads.h>
12
13#include <htils/arena.h>
14#include <htils/atomic_types.h>
15#include <htils/basictypes.h>
16
17/***********************************/
18
26
42typedef void (*htils_worker_fn_t)(void *userdata, arena_t *scratch);
43
62typedef htils_worker_step_t (*htils_worker_task_t)(void *userdata,
63 arena_t *scratch);
64
72
105
106//
107//
108//
109
114
115//
116//
117//
118
136 const htils_worker_config_t *config,
137 htils_worker_fn_t fn, void *userdata);
138
139//
140//
141//
142
161 const htils_worker_config_t *config,
162 htils_worker_task_t task, void *userdata);
163
164//
165//
166//
167
177
178//
179//
180//
181
192void htils_worker_set_paused(htils_worker_t *worker, b32 paused);
193
194//
195//
196//
197
206
207//
208//
209//
210
219
220//
221//
222//
223
234
235//
236//
237//
238
247
248#endif // !HTILS_THREAD_SAFE
249#endif // !HTILS_WORKER_H
struct arena arena_t
An atomic arena.
atomic_u32 atomic_b32
Definition atomic_types.h:43
u32 b32
Definition basictypes.h:43
Worker options.
Definition worker.h:69
b32 detach
Definition worker.h:70
A reusable worker slot.
Definition worker.h:92
arena_t * scratch
Definition worker.h:94
cnd_t pause_cnd
Definition worker.h:102
atomic_b32 pause
Definition worker.h:96
htils_worker_fn_t fn
Definition worker.h:98
b32 detached
Definition worker.h:97
atomic_b32 running
Definition worker.h:95
b32 primitives_init
Definition worker.h:103
thrd_t thread
Definition worker.h:93
htils_worker_task_t task
Definition worker.h:99
mtx_t pause_mtx
Definition worker.h:101
void * userdata
Definition worker.h:100
struct htils_worker_config htils_worker_config_t
Worker options.
b32 htils_worker_running(const htils_worker_t *worker)
Check if a worker is running a task.
Definition worker.c:176
struct htils_worker htils_worker_t
A reusable worker slot.
htils_worker_step_t(* htils_worker_task_t)(void *userdata, arena_t *scratch)
Sliced task body.
Definition worker.h:62
void htils_worker_join(htils_worker_t *worker)
Waits for the task to finish.
Definition worker.c:197
b32 htils_worker_spawn_task(htils_worker_t *worker, const htils_worker_config_t *config, htils_worker_task_t task, void *userdata)
Spawns a sliced worker task.
Definition worker.c:142
void htils_worker_set_paused(htils_worker_t *worker, b32 paused)
Pause or resume a sliced worker.
Definition worker.c:165
void htils_worker_request_stop(htils_worker_t *worker)
Ask a worker to stop.
Definition worker.c:156
b32 htils_worker_paused(const htils_worker_t *worker)
Check if a sliced worker is paused.
Definition worker.c:183
b32 htils_worker_should_stop(const htils_worker_t *worker)
Checks whether a stop was requested (Polled by single-shot workers).
Definition worker.c:190
htils_worker_config_t htils_worker_config_default(void)
Default worker options (Detachable).
Definition worker.c:124
b32 htils_worker_spawn(htils_worker_t *worker, const htils_worker_config_t *config, htils_worker_fn_t fn, void *userdata)
Spawns a single-shot worker.
Definition worker.c:128
htils_worker_step_t
Result of one task slice.
Definition worker.h:22
@ HTILS_WORKER_CONTINUE
Definition worker.h:23
@ HTILS_WORKER_DONE
Definition worker.h:24
void(* htils_worker_fn_t)(void *userdata, arena_t *scratch)
Single-shot worker body.
Definition worker.h:42