diff options
| author | proven <proven@NetBSD.org> | 1993-11-14 22:06:22 +0000 |
|---|---|---|
| committer | proven <proven@NetBSD.org> | 1993-11-14 22:06:22 +0000 |
| commit | 89fc7bac0859332dbb6b0fd0833e74557beadc29 (patch) | |
| tree | 86e4d7e252c6c2d1986520949df2e3190a767e77 /lib/libpthread/include/pthread.h | |
| parent | 08322f94235c9fdbef8dc69c9699e836b6caf9d4 (diff) | |
Initial release of the POSIX 1003.4a Draft 7 thread implementation.
Diffstat (limited to 'lib/libpthread/include/pthread.h')
| -rw-r--r-- | lib/libpthread/include/pthread.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/libpthread/include/pthread.h b/lib/libpthread/include/pthread.h new file mode 100644 index 00000000000..4a5fbd6d250 --- /dev/null +++ b/lib/libpthread/include/pthread.h @@ -0,0 +1,93 @@ +/* ==== pthread.h ============================================================ + * Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu + * + * Description : Basic pthread header. + * + * 1.00 93/07/20 proven + * -Started coding this file. + */ + +#include <pthread/copyright.h> +#include <pthread/machdep.h> +#include <pthread/kernel.h> +#include <pthread/queue.h> +#include <pthread/mutex.h> +#include <pthread/cond.h> +#include <pthread/fd.h> + +#include <pthread/util.h> +/* #include <pthread/stdio.h> Because I'm a moron -- proven */ +#include <errno.h> + +/* More includes, that need size_t or NULL */ +#include <pthread/pthread_attr.h> + +enum pthread_state { + PS_RUNNING, + PS_MUTEX_WAIT, + PS_COND_WAIT, + PS_FDLR_WAIT, + PS_FDLW_WAIT, + PS_FDR_WAIT, + PS_FDW_WAIT, + PS_DEAD +}; + +struct pthread { + struct machdep_pthread machdep_data; + struct pthread_queue *queue; + enum pthread_state state; + pthread_attr_t attr; + + /* + * Thread implementations are just multiple queue type implemenations, + * Below are the various link lists currently necessary + * It is possible for a thread to be on multiple, or even all the + * queues at once, much care must be taken during queue manipulation. + */ + struct pthread *pll; /* ALL threads, in any state */ + /* struct pthread *rll; /* Current run queue, before resced */ + struct pthread *next; /* Standard for mutexes, etc ... */ + struct pthread *s_next; /* For sleeping threads */ + /* struct pthread *fd_next; /* For kernel fd operations */ + + int fd; /* Used when thread waiting on fd */ + + semaphore lock; + int error; +}; + +typedef struct pthread* pthread_t; + +/* + * Globals + */ +extern struct pthread *pthread_run; +extern struct pthread *pthread_initial; +extern struct pthread *pthread_link_list; +extern pthread_attr_t pthread_default_attr; +extern struct pthread_queue pthread_current_queue; +extern struct fd_table_entry *fd_table[]; + +/* + * New functions + */ + +__BEGIN_DECLS + +int pthread_create __P((pthread_t *, const pthread_attr_t *, + void * (*start_routine)(void *), void *)); +void pthread_exit __P((void *)); +pthread_t pthread_self __P((void)); +int pthread_equal __P((pthread_t, pthread_t)); + +#if defined(PTHREAD_KERNEL) + +void pthread_yield __P((void)); + +/* Not valid, but I can't spell so this will be caught at compile time */ +#define pthread_yeild(notvalid) + +#endif + +__END_DECLS |
