From 3edeaf1f5280b88da6cf60ad65f9c5c5c8d508c2 Mon Sep 17 00:00:00 2001 From: fusion32 Date: Thu, 22 May 2025 14:43:54 -0300 Subject: implement threading API --- src/thread.hh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/thread.hh (limited to 'src/thread.hh') diff --git a/src/thread.hh b/src/thread.hh new file mode 100644 index 0000000..a3b0d04 --- /dev/null +++ b/src/thread.hh @@ -0,0 +1,33 @@ +#ifndef TIBIA_THREAD_HH_ +#define TIBIA_THREAD_HH_ 1 + +#include "main.hh" +#include + +typedef pthread_t ThreadHandle; +typedef int (ThreadFunction)(void *); + +// TODO(fusion): Probably have another way to tell whether the thread was +// successfully spawned or not? +constexpr ThreadHandle INVALID_THREAD_HANDLE = 0; + +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, bool Detach); +int JoinThread(ThreadHandle Handle); +void DelayThread(int Seconds, int MicroSeconds); + +struct Semaphore { + // REGULAR FUNCTIONS + // ========================================================================= + Semaphore(void); + ~Semaphore(void); + void up(void); + void down(void); + + // DATA + // ========================================================================= + int value; + pthread_mutex_t mutex; + pthread_cond_t condition; +}; + +#endif //TIBIA_THREAD_HH_ -- cgit v1.2.3