#include "commons/commons_thread.h" #include "commons/commons_fmt.h" #include "commons/commons_region_alloc.h" #include struct _thread { pthread_t handle; void (*fn)(void* userdata); void* userdata; }; static auto Trampoline(void* arg) -> void* { thread self = (thread)arg; self->fn(self->userdata); return nullptr; } auto API Thread_Create(region_alloc& alloc, void (*fn)(void* userdata), void* userdata) -> thread { _thread& self = RegionAlloc_Alloc<_thread>(alloc); self.fn = fn; self.userdata = userdata; int res = pthread_create(&self.handle, nullptr, &Trampoline, &self); ASSERT(res == 0); return &self; } void API Thread_Join(thread self) { int res = pthread_join(self->handle, nullptr); ASSERT(res == 0); }