00001
00002 #ifndef CPTHREADS_H
00003 #define CPTHREADS_H
00004
00005 #include <converse.h>
00006
00007 #include <sys/types.h>
00008
00009 #define CPTHREAD_THREADS_MAX 1000000000
00010 #define CPTHREAD_KEYS_MAX 1000000000
00011 #define CPTHREAD_STACK_MIN 32768
00012 #define CPTHREAD_CREATE_DETACHED 1
00013 #define CPTHREAD_CREATE_JOINABLE 0
00014
00015 struct Cpthread_attr_s
00016 {
00017 int magic;
00018 int detached;
00019 int stacksize;
00020 };
00021
00022 struct Cpthread_mutexattr_s
00023 {
00024 int magic;
00025 int pshared;
00026 };
00027
00028 struct Cpthread_mutex_s
00029 {
00030 int magic;
00031 int onpe;
00032 void *users;
00033 };
00034
00035 struct Cpthread_condattr_s
00036 {
00037 int magic;
00038 int pshared;
00039 };
00040
00041 struct Cpthread_cond_s
00042 {
00043 int magic;
00044 int onpe;
00045 void *users;
00046 };
00047
00048 typedef struct { int flag[32]; } Cpthread_once_t;
00049
00050 #define CPTHREAD_ONCE_INIT {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
00051
00052 typedef struct Cpthread_attr_s Cpthread_attr_t;
00053 typedef struct Cpthread_key_s *Cpthread_key_t;
00054 typedef struct Cpthread_cleanup_s *Cpthread_cleanup_t;
00055 typedef struct Cpthread_mutexattr_s Cpthread_mutexattr_t;
00056 typedef struct Cpthread_condattr_s Cpthread_condattr_t;
00057 typedef struct Cpthread_mutex_s Cpthread_mutex_t;
00058 typedef struct Cpthread_cond_s Cpthread_cond_t;
00059 typedef struct Cpthread_s *Cpthread_t;
00060
00061 #ifdef CPTHREAD_IS_HERE
00062 CtvDeclare(Cpthread_t, Cpthread_current);
00063 CtvDeclare(int, Cpthread_errcode);
00064 #else
00065 CtvExtern(Cpthread_t, Cpthread_current);
00066 CtvExtern(int, Cpthread_errcode);
00067 #endif
00068
00069 #define Cpthread_self() (CtvAccess(Cpthread_current))
00070 #define Cpthread_errno (CtvAccess(Cpthread_errcode))
00071
00072 int Cpthread_attr_init(Cpthread_attr_t *attr);
00073 int Cpthread_attr_destroy(Cpthread_attr_t *attr);
00074 int Cpthread_attr_getstacksize(Cpthread_attr_t *attr, size_t *size);
00075 int Cpthread_attr_setstacksize(Cpthread_attr_t *attr, size_t size);
00076 int Cpthread_attr_getdetachstate(Cpthread_attr_t *attr, int *state);
00077 int Cpthread_attr_setdetachstate(Cpthread_attr_t *attr, int state);
00078 int Cpthread_key_create(Cpthread_key_t *keyp, void (*destructo)(void *));
00079 int Cpthread_key_delete(Cpthread_key_t key);
00080 int Cpthread_setspecific(Cpthread_key_t key, void *val);
00081 void *Cpthread_getspecific(Cpthread_key_t key);
00082 void Cpthread_cleanup_push(void (*routine)(void*), void *arg);
00083 void Cpthread_cleanup_pop(int execute);
00084 void Cpthread_exit(void *status);
00085 void Cpthread_top(Cpthread_t pt);
00086 int Cpthread_create(Cpthread_t *thread, Cpthread_attr_t *attr,
00087 void *(*fn)(void *), void *arg);
00088 int Cpthread_equal(Cpthread_t t1, Cpthread_t t2);
00089 int Cpthread_detach(Cpthread_t pt);
00090 int Cpthread_join(Cpthread_t pt, void **status);
00091 int Cpthread_mutexattr_init(Cpthread_mutexattr_t *mattr);
00092 int Cpthread_mutexattr_destroy(Cpthread_mutexattr_t *mattr);
00093 int Cpthread_mutexattr_getpshared(Cpthread_mutexattr_t *mattr,int *pshared);
00094 int Cpthread_mutexattr_setpshared(Cpthread_mutexattr_t *mattr,int pshared);
00095 int Cpthread_mutex_init(Cpthread_mutex_t *mutex,Cpthread_mutexattr_t *mattr);
00096 int Cpthread_mutex_destroy(Cpthread_mutex_t *mutex);
00097 int Cpthread_mutex_lock(Cpthread_mutex_t *mutex);
00098 int Cpthread_mutex_trylock(Cpthread_mutex_t *mutex);
00099 int Cpthread_mutex_unlock(Cpthread_mutex_t *mutex);
00100 int Cpthread_condattr_init(Cpthread_condattr_t *cattr);
00101 int Cpthread_condattr_destroy(Cpthread_condattr_t *cattr);
00102 int Cpthread_condattr_getpshared(Cpthread_condattr_t *cattr, int *pshared);
00103 int Cpthread_condattr_setpshared(Cpthread_condattr_t *cattr, int pshared);
00104 int Cpthread_cond_init(Cpthread_cond_t *cond, Cpthread_condattr_t *cattr);
00105 int Cpthread_cond_destroy(Cpthread_cond_t *cond);
00106 int Cpthread_cond_wait(Cpthread_cond_t *cond, Cpthread_mutex_t *mutex);
00107 int Cpthread_cond_signal(Cpthread_cond_t *cond);
00108 int Cpthread_cond_broadcast(Cpthread_cond_t *cond);
00109 int Cpthread_once(Cpthread_once_t *once, void (*fn)(void));
00110
00111 int Cpthread_init();
00112
00113 void Cpthread_initialize();
00114 void Cpthread_start_main(CmiStartFn fn, int argc, char **argv);
00115
00116 #define Cpthread_yield() (CthYield())
00117
00118 #ifndef SUPPRESS_PTHREADS
00119
00120 #define _POSIX_THREADS
00121 #define _POSIX_THREAD_ATTR_STACKSIZE
00122
00123
00124
00125
00126
00127
00128 #define PTHREAD_THREADS_MAX CPTHREAD_THREADS_MAX
00129 #define PTHREAD_KEYS_MAX CPTHREAD_KEYS_MAX
00130 #define PTHREAD_STACK_MIN CPTHREAD_STACK_MIN
00131 #define PTHREAD_CREATE_DETACHED CPTHREAD_CREATE_DETACHED
00132 #define PTHREAD_CREATE_JOINABLE CPTHREAD_CREATE_JOINABLE
00133
00134 #define PTHREAD_ONCE_INIT CPTHREAD_ONCE_INIT
00135
00136 #define pthread_once_t Cpthread_once_t
00137 #define pthread_attr_t Cpthread_attr_t
00138 #define pthread_key_t Cpthread_key_t
00139 #define pthread_cleanup_t Cpthread_cleanup_t
00140 #define pthread_mutexattr_t Cpthread_mutexattr_t
00141 #define pthread_condattr_t Cpthread_condattr_t
00142 #define pthread_mutex_t Cpthread_mutex_t
00143 #define pthread_cond_t Cpthread_cond_t
00144 #define pthread_t Cpthread_t
00145 #define pthread_attr_init Cpthread_attr_init
00146 #define pthread_attr_destroy Cpthread_attr_destroy
00147 #define pthread_attr_getstacksize Cpthread_attr_getstacksize
00148 #define pthread_attr_setstacksize Cpthread_attr_setstacksize
00149 #define pthread_attr_getdetachstate Cpthread_attr_getdetachstate
00150 #define pthread_attr_setdetachstate Cpthread_attr_setdetachstate
00151 #define pthread_key_create Cpthread_key_create
00152 #define pthread_key_delete Cpthread_key_delete
00153 #define pthread_setspecific Cpthread_setspecific
00154 #define pthread_getspecific Cpthread_getspecific
00155 #define pthread_cleanup_push Cpthread_cleanup_push
00156 #define pthread_cleanup_pop Cpthread_cleanup_pop
00157 #define pthread_exit Cpthread_exit
00158 #define pthread_top Cpthread_top
00159 #define pthread_create Cpthread_create
00160 #define pthread_equal Cpthread_equal
00161 #define pthread_self Cpthread_self
00162 #define pthread_detach Cpthread_detach
00163 #define pthread_join Cpthread_join
00164 #define pthread_mutexattr_init Cpthread_mutexattr_init
00165 #define pthread_mutexattr_destroy Cpthread_mutexattr_destroy
00166 #define pthread_mutexattr_getpshared Cpthread_mutexattr_getpshared
00167 #define pthread_mutexattr_setpshared Cpthread_mutexattr_setpshared
00168 #define pthread_mutex_init Cpthread_mutex_init
00169 #define pthread_mutex_destroy Cpthread_mutex_destroy
00170 #define pthread_mutex_lock Cpthread_mutex_lock
00171 #define pthread_mutex_trylock Cpthread_mutex_trylock
00172 #define pthread_mutex_unlock Cpthread_mutex_unlock
00173 #define pthread_condattr_init Cpthread_condattr_init
00174 #define pthread_condattr_destroy Cpthread_condattr_destroy
00175 #define pthread_condattr_getpshared Cpthread_condattr_getpshared
00176 #define pthread_condattr_setpshared Cpthread_condattr_setpshared
00177 #define pthread_cond_init Cpthread_cond_init
00178 #define pthread_cond_destroy Cpthread_cond_destroy
00179 #define pthread_cond_wait Cpthread_cond_wait
00180 #define pthread_cond_signal Cpthread_cond_signal
00181 #define pthread_cond_broadcast Cpthread_cond_broadcast
00182 #define pthread_once Cpthread_once
00183 #define pthread_init Cpthread_init
00184
00185 #define pthread_yield (CthYield())
00186
00187 #endif
00188
00189 #endif
00190