aboutsummaryrefslogtreecommitdiff
path: root/include/kpl/process.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/kpl/process.h')
-rw-r--r--include/kpl/process.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/include/kpl/process.h b/include/kpl/process.h
new file mode 100644
index 0000000..d46fd2f
--- /dev/null
+++ b/include/kpl/process.h
@@ -0,0 +1,44 @@
+
+#pragma once
+
+// Kpl threads, allocators, atomic queues and garbage collection
+
+#include "kpl/macro.h"
+
+typedef struct {
+ int32_t count;
+} kpl_config_thread;
+
+typedef struct _kpl_task kpl_task;
+
+typedef struct _kpl_env kpl_env;
+
+typedef void kpl_task_fn(kpl_task *task, kpl_env *env);
+
+typedef struct _kpl_task {
+ struct _kpl_task *_Atomic next, *join;
+ // TODO
+ kpl_result result;
+ int32_t thread_id;
+ _Atomic bool join_ready;
+} kpl_task;
+
+typedef struct {
+ kpl_task *_Atomic head, *_Atomic tail;
+ struct {
+ kpl_task *_Atomic next;
+ } dummy;
+} kpl_task_queue;
+
+typedef struct {
+ kpl_task_queue task_queue;
+ _Atomic ssize_t priority;
+ // TODO
+ sem_t spin_counter;
+ pthread_t thread;
+} kpl_thread;
+
+typedef struct {
+ _Atomic ssize_t total_priority;
+ kpl_thread *threads;
+} kpl_process;