diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-20 12:34:54 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-20 12:34:54 +0100 |
| commit | 4cc8124f0715a5d336071be06a4efd574471e691 (patch) | |
| tree | 9b6dfd6681fa71aa5212ef4dde073ef5b64d9bf3 /frameworks/libThread.fwrk/src/ThreadManager.cpp | |
| parent | 49a9467b532ff5d69fa187500391db480d406d66 (diff) | |
[CHORE] Working on libThread for NeKernel's thread implementation.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'frameworks/libThread.fwrk/src/ThreadManager.cpp')
| -rw-r--r-- | frameworks/libThread.fwrk/src/ThreadManager.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/frameworks/libThread.fwrk/src/ThreadManager.cpp b/frameworks/libThread.fwrk/src/ThreadManager.cpp new file mode 100644 index 0000000..9b222ab --- /dev/null +++ b/frameworks/libThread.fwrk/src/ThreadManager.cpp @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2026, Amlal El Mahrouss (amlal@nekernel.org) +// Licensed under the Apache License, Version 2.0 (see LICENSE file) +// Official repository: https://github.com/ne-foss-org/ne_system + +#include <libSystem/SystemKit/System.h> + +#define kThreadMapMax (1024UL) +#define kThreadBaseHash (0x5555ffff6ULL) + +/// @brief The registered thread for a specific process. +static ThreadRef kThreadMap[kThreadMapMax]; + +/// @brief This hash-list stores the thread to be run. +static ThreadRef kThreadHeads[kThreadMapMax]; + +IMPORT_C ThreadRef ThrCreateThread(const Char* thread_name, ThrProcKind procedure, + SInt32 argument_count, VoidPtr args, SInt32 flags) { + ThreadRef ref = new REF_TYPE; + if (!ref) return nullptr; + + if (!thread_name || !procedure) { + delete ref; + ref = nullptr; + return nullptr; + } + + ref->__hash = *(UInt32*) thread_name; + ref->__hash += kThreadBaseHash; + + ref->__self = (VoidPtr) procedure; + + kThreadMap[kThreadMapMax % ref->__hash] = ref; + kThreadHeads[kThreadMapMax % ref->__hash] = ref; + + return ref; +} |
