From 07af98f3a5a54a8736109ed031d3177508943299 Mon Sep 17 00:00:00 2001 From: nodist Date: Wed, 23 Sep 2026 12:32:31 -0400 Subject: add task queues --- include/kpl/process.h | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'include/kpl/process.h') diff --git a/include/kpl/process.h b/include/kpl/process.h index d46fd2f..b47e122 100644 --- a/include/kpl/process.h +++ b/include/kpl/process.h @@ -3,14 +3,25 @@ // Kpl threads, allocators, atomic queues and garbage collection -#include "kpl/macro.h" +#include "kpl/queue.h" + +typedef enum : int8_t { + KPL_CONFIG_THREAD_COUNT_AFFINITY = -1, + KPL_CONFIG_THREAD_COUNT_MAX = 127 +} kpl_config_thread_count; + +typedef enum : uint8_t { + KPL_CONFIG_THREAD_RING_POOL_COUNT = 28, + KPL_CONFIG_THREAD_RING_POOL_MIN_OBJECT_SIZE_POW2 = 5, + KPL_CONFIG_THREAD_RING_POOL_MAX_OBJECT_SIZE_POW2 = 27, + KPL_CONFIG_THREAD_RING_POOL_MIN_RING_SIZE_POW2 = 6, + KPL_CONFIG_THREAD_RING_POOL_MAX_RING_SIZE_POW2 = 20 +} kpl_config_thread_ring_pool; typedef struct { - int32_t count; + int8_t count, ring_pool_entries_pow2[KPL_CONFIG_THREAD_RING_POOL_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); @@ -23,22 +34,17 @@ typedef struct _kpl_task { _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; + sem_t sem; + pthread_t pthread; } kpl_thread; typedef struct { + kpl_config_thread *config_thread; _Atomic ssize_t total_priority; kpl_thread *threads; + kpl_ring_queue memory_pool[KPL_CONFIG_THREAD_RING_POOL_COUNT]; } kpl_process; -- cgit v1.2.3