1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-23 18:55:08 +00:00

LibPthread: Start working on a POSIX threading library

This patch adds pthread_create() and pthread_exit(), which currently
simply wrap our existing create_thread() and exit_thread() syscalls.

LibThread is also ported to using LibPthread.
This commit is contained in:
Andreas Kling 2019-11-13 21:49:24 +01:00
parent 4fe2ee0221
commit 69ca9cfd78
16 changed files with 89 additions and 31 deletions

View file

@ -1,4 +1,5 @@
#include <LibThread/Thread.h>
#include <pthread.h>
#include <unistd.h>
LibThread::Thread::Thread(Function<int()> action)
@ -17,17 +18,20 @@ LibThread::Thread::~Thread()
void LibThread::Thread::start()
{
int rc = create_thread([](void* arg) {
Thread* self = static_cast<Thread*>(arg);
int exit_code = self->m_action();
self->m_tid = -1;
exit_thread(exit_code);
return exit_code;
}, static_cast<void*>(this));
int rc = pthread_create(
&m_tid,
nullptr,
[](void* arg) -> void* {
Thread* self = static_cast<Thread*>(arg);
int exit_code = self->m_action();
self->m_tid = -1;
pthread_exit((void*)exit_code);
return (void*)exit_code;
},
static_cast<void*>(this));
ASSERT(rc > 0);
dbg() << "Started a thread, tid = " << rc;
m_tid = rc;
ASSERT(rc == 0);
dbg() << "Started a thread, tid = " << m_tid;
}
void LibThread::Thread::quit(int code)
@ -35,5 +39,5 @@ void LibThread::Thread::quit(int code)
ASSERT(m_tid == gettid());
m_tid = -1;
exit_thread(code);
pthread_exit((void*)code);
}