Begin implementing basic pthread functionality.

This commit is contained in:
Ali Mashtizadeh 2015-01-16 20:15:47 -08:00
parent 1160570250
commit 34c637960a
3 changed files with 148 additions and 0 deletions

49
include/pthread.h Normal file
View File

@ -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__ */

View File

@ -16,6 +16,7 @@ src_common = [
"printf.c", "printf.c",
"process.c", "process.c",
"posix/mman.c", "posix/mman.c",
"posix/pthread.c",
"string.c", "string.c",
"syscall.c", "syscall.c",
"time.c", "time.c",

98
lib/libc/posix/pthread.c Normal file
View File

@ -0,0 +1,98 @@
#include <stdint.h>
#include <unistd.h>
#include <pthread.h>
#include <syscall.h>
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
*/