From 34c637960a2ecd204f8809d223f87f69ab776036 Mon Sep 17 00:00:00 2001 From: Ali Mashtizadeh Date: Fri, 16 Jan 2015 20:15:47 -0800 Subject: [PATCH] Begin implementing basic pthread functionality. --- include/pthread.h | 49 ++++++++++++++++++++ lib/libc/SConscript | 1 + lib/libc/posix/pthread.c | 98 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 include/pthread.h create mode 100644 lib/libc/posix/pthread.c diff --git a/include/pthread.h b/include/pthread.h new file mode 100644 index 0000000..29e0bdf --- /dev/null +++ b/include/pthread.h @@ -0,0 +1,49 @@ + +#ifndef __PTHREAD_H__ +#define __PTHREAD_H__ + +typedef uint64_t pthread_t; +typedef uint64_t pthread_attr_t; +typedef uint64_t pthread_barrier_t; +typedef uint64_t pthread_barrierattr_t; +typedef uint64_t pthread_mutex_t; +typedef uint64_t pthread_mutexattr_t; + +pthread_t pthread_self(void); +int pthread_create(pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine)(void *), void *arg); +void pthread_exit(void *value_ptr); +int pthread_join(pthread_t thread, void **value_ptr); +void pthread_yield(void); + +/* + * Barriers + */ + +int pthread_barrier_init(pthread_barrier_t *barrier, + const pthread_barrierattr_t *attr, + unsigned count); +int pthread_barrier_destroy(pthread_barrier_t *barrier); +int pthread_barrier_wait(pthread_barrier_t *barrier); + +/* + * Mutex + */ + +int pthread_mutex_init(pthread_mutex_t *mutex, + const pthread_mutexattr_t *attr); +int pthread_mutex_destroy(pthread_mutex_t *mutex); +int pthread_mutex_lock(pthread_mutex_t *mutex); +int pthread_mutex_trylock(pthread_mutex_t *mutex); +int pthread_mutex_unlock(pthread_mutex_t *mutex); + +/* + * Reader/Writer Lock + */ + +/* + * Condition Variables + */ + +#endif /* __PTHREAD_H__ */ + diff --git a/lib/libc/SConscript b/lib/libc/SConscript index 4d44201..768eef0 100644 --- a/lib/libc/SConscript +++ b/lib/libc/SConscript @@ -16,6 +16,7 @@ src_common = [ "printf.c", "process.c", "posix/mman.c", + "posix/pthread.c", "string.c", "syscall.c", "time.c", diff --git a/lib/libc/posix/pthread.c b/lib/libc/posix/pthread.c new file mode 100644 index 0000000..a32af77 --- /dev/null +++ b/lib/libc/posix/pthread.c @@ -0,0 +1,98 @@ + +#include + +#include +#include + +#include + +pthread_t +pthread_self(void) +{ +} + +int +pthread_create(pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine)(void *), void *arg) +{ +} + +void +pthread_exit(void *value_ptr) +{ + OSThreadExit(value_ptr); +} + +int +pthread_join(pthread_t thread, void **value_ptr) +{ + uint64_t value = OSThreadWait(thread); + + *value_ptr = (void *)value; +} + +void +pthread_yield(void) +{ + OSThreadSleep(0); +} + +/* + * Barriers + */ + +int +pthread_barrier_init(pthread_barrier_t *barrier, + const pthread_barrierattr_t *attr, + unsigned count) +{ +} + +int +pthread_barrier_destroy(pthread_barrier_t *barrier) +{ +} + +int +pthread_barrier_wait(pthread_barrier_t *barrier) +{ +} + +/* + * Mutex + */ + +int +pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) +{ +} + +int +pthread_mutex_destroy(pthread_mutex_t *mutex) +{ +} + +int +pthread_mutex_lock(pthread_mutex_t *mutex) +{ +} + +int +pthread_mutex_trylock(pthread_mutex_t *mutex) +{ +} + +int +pthread_mutex_unlock(pthread_mutex_t *mutex) +{ +} + + +/* + * Reader/Writer Lock + */ + +/* + * Condition Variables + */ +