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:
parent
4fe2ee0221
commit
69ca9cfd78
16 changed files with 89 additions and 31 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue