aboutsummaryrefslogtreecommitdiff
path: root/src/threading/pool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/threading/pool.h')
-rw-r--r--src/threading/pool.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/threading/pool.h b/src/threading/pool.h
new file mode 100644
index 0000000..73655d0
--- /dev/null
+++ b/src/threading/pool.h
@@ -0,0 +1,38 @@
+#ifndef POOL_H
+#define POOL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+
+typedef void *(*worker_func)(void *);
+
+struct pool_task_t {
+ worker_func func;
+ void* arg;
+ int done;
+};
+
+struct pool_t {
+ int workers;
+
+ struct pool_task_t* tasks;
+ struct pool_task_t* task_next;
+ size_t pool_size;
+
+ int* condition;
+};
+
+struct pool_t* pool_init();
+void pool_free(struct pool_t*);
+
+void pool_submit(struct pool_t*, worker_func, void*);
+void pool_complete(struct pool_t*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif \ No newline at end of file