]> git.sur5r.net Git - openldap/blob - include/lthread.h
Replaced PREEMPTIVE_THREADS with HAVE_YIELDING_SELECT to clarify
[openldap] / include / lthread.h
1 /* lthread.h - ldap threads header file */
2
3 #ifndef _LTHREAD_H
4 #define _LTHREAD_H
5
6 #include "portable.h"
7
8 #if defined( HAVE_PTHREADS )
9 /**********************************
10  *                                *
11  * definitions for POSIX Threads  *
12  *                                *
13  **********************************/
14
15 #include <pthread.h>
16 #ifdef HAVE_SCHED_H
17 #include <sched.h>
18 #endif
19
20 LDAP_BEGIN_DECL
21
22 #if !defined( HAVE_PTHREAD_ATTR_INIT ) && \
23         defined( HAVE_PTHREAD_ATTR_CREATE )
24 #define pthread_attr_init( a )          pthread_attr_create( a )
25 #endif
26
27 #if !defined( HAVE_PTHREAD_ATTR_DESTROY ) && \
28         defined( HAVE_PTHREAD_ATTR_DELETE )
29 #define pthread_attr_destroy( a )       pthread_attr_delete( a )
30 #endif
31
32 #if !defined( HAVE_PTHREAD_ATTR_SETDETACHSTATE ) && \
33         defined( HAVE_PTHREAD_ATTR_SETDETACH_NP )
34 #define pthread_attr_setdetachstate( a, b ) \
35                                         pthread_attr_setdetach_np( a, b )
36 #endif
37
38 #ifndef HAVE_PTHREAD_KILL
39 /* missing pthread_kill(), define prototype */
40 LDAP_F void pthread_kill LDAP_P(( pthread_t tid, int sig ));
41 #endif
42
43 #ifndef HAVE_PTHREADS_D4
44 #define pthread_mutexattr_default       NULL
45 #define pthread_condattr_default        NULL
46
47 #ifdef HAVE_SCHED_YIELD
48 #define pthread_yield sched_yield
49 #endif
50 #endif
51
52 LDAP_END_DECL
53
54 #elif defined ( HAVE_MACH_CTHREADS )
55 /**********************************
56  *                                *
57  * definitions for Mach CThreads  *
58  *                                *
59  **********************************/
60
61 #include <mach/cthreads.h>
62
63 LDAP_BEGIN_DECL
64
65 typedef cthread_fn_t    VFP;
66 typedef int             pthread_attr_t;
67 typedef cthread_t       pthread_t;
68
69 /* default attr states */
70 #define pthread_mutexattr_default       NULL
71 #define pthread_condattr_default        NULL
72
73 /* thread state - joinable or not */
74 #define PTHREAD_CREATE_JOINABLE 0
75 #define PTHREAD_CREATE_DETACHED 1
76 /* thread scope - who is in scheduling pool */
77 #define PTHREAD_SCOPE_PROCESS   0
78 #define PTHREAD_SCOPE_SYSTEM    1
79
80 /* mutex attributes and mutex type */
81 typedef int     pthread_mutexattr_t;
82 typedef struct mutex pthread_mutex_t;
83
84 /* mutex and condition variable scope - process or system */
85 #define PTHREAD_SHARE_PRIVATE   0
86 #define PTHREAD_SHARE_PROCESS   1
87
88 /* condition variable attributes and condition variable type */
89 typedef int     pthread_condattr_t;
90 typedef struct condition pthread_cond_t;
91
92 LDAP_END_DECL
93
94 #elif defined( HAVE_THR )
95 /**************************************
96  *                                    *
97  * thread definitions for Solaris LWP *
98  *                                    *
99  **************************************/
100
101 #include <thread.h>
102 #include <synch.h>
103
104 LDAP_BEGIN_DECL
105
106 typedef void    *(*VFP)();
107
108 /* default attr states */
109 #define pthread_mutexattr_default       NULL
110 #define pthread_condattr_default        NULL
111
112 /* thread state - joinable or not */
113 #define PTHREAD_CREATE_JOINABLE 0
114 #define PTHREAD_CREATE_DETACHED THR_DETACHED
115 /* thread scope - who is in scheduling pool */
116 #define PTHREAD_SCOPE_PROCESS   0
117 #define PTHREAD_SCOPE_SYSTEM    THR_BOUND
118 /* mutex and condition variable scope - process or system */
119 #define PTHREAD_SHARE_PRIVATE   USYNC_THREAD
120 #define PTHREAD_SHARE_PROCESS   USYNC_PROCESS
121
122
123 #if !defined(__SunOS_5_6)
124 /* thread attributes and thread type */
125 typedef int             pthread_attr_t;
126 typedef thread_t        pthread_t;
127
128 /* mutex attributes and mutex type */
129 typedef int     pthread_mutexattr_t;
130 typedef mutex_t pthread_mutex_t;
131
132 /* condition variable attributes and condition variable type */
133 typedef int     pthread_condattr_t;
134 typedef cond_t  pthread_cond_t;
135 #endif /* ! sunos56 */
136
137 LDAP_END_DECL
138
139 #elif defined( HAVE_LWP )
140 /*************************************
141  *                                   *
142  * thread definitions for SunOS LWP  *
143  *                                   *
144  *************************************/
145
146 #include <lwp/lwp.h>
147 #include <lwp/stackdep.h>
148
149 LDAP_BEGIN_DECL
150
151 stkalign_t *get_stack( int *stacknop );
152 void free_stack( int *stackno );
153
154 typedef void    *(*VFP)();
155
156 /* thread attributes and thread type */
157 typedef int             pthread_attr_t;
158 typedef thread_t        pthread_t;
159
160 /* default attr states */
161 #define pthread_mutexattr_default       NULL
162 #define pthread_condattr_default        NULL
163
164 /* thread state - joinable or not */
165 #define PTHREAD_CREATE_JOINABLE 0
166 #define PTHREAD_CREATE_DETACHED 1
167 /* thread scope - who is in scheduling pool */
168 #define PTHREAD_SCOPE_PROCESS   0
169 #define PTHREAD_SCOPE_SYSTEM    1
170
171 /* mutex attributes and mutex type */
172 typedef int     pthread_mutexattr_t;
173 typedef mon_t   pthread_mutex_t;
174
175 /* mutex and condition variable scope - process or system */
176 #define PTHREAD_SHARE_PRIVATE   0
177 #define PTHREAD_SHARE_PROCESS   1
178
179 /* condition variable attributes and condition variable type */
180 typedef int     pthread_condattr_t;
181 typedef struct lwpcv {
182         int             lcv_created;
183         cv_t            lcv_cv;
184 } pthread_cond_t;
185
186 LDAP_END_DECL
187
188 #else
189
190 /***********************************
191  *                                 *
192  * thread definitions for no       *
193  * underlying library support      *
194  *                                 *
195  ***********************************/
196
197 LDAP_BEGIN_DECL
198
199 #ifndef NO_THREADS
200 #define NO_THREADS 1
201 #endif
202
203 typedef void    *(*VFP)();
204
205 /* thread attributes and thread type */
206 typedef int     pthread_attr_t;
207 typedef int     pthread_t;
208
209 /* default attr states */
210 #define pthread_mutexattr_default       NULL
211 #define pthread_condattr_default        NULL
212
213 /* thread state - joinable or not */
214 #define PTHREAD_CREATE_JOINABLE 0
215 #define PTHREAD_CREATE_DETACHED 0
216 /* thread scope - who is in scheduling pool */
217 #define PTHREAD_SCOPE_PROCESS   0
218 #define PTHREAD_SCOPE_SYSTEM    0
219
220 /* mutex attributes and mutex type */
221 typedef int     pthread_mutexattr_t;
222 typedef int     pthread_mutex_t;
223
224 /* mutex and condition variable scope - process or system */
225 #define PTHREAD_SHARE_PRIVATE   0
226 #define PTHREAD_SHARE_PROCESS   0
227
228 /* condition variable attributes and condition variable type */
229 typedef int     pthread_condattr_t;
230 typedef int     pthread_cond_t;
231
232 LDAP_END_DECL
233
234 #endif /* no threads support */
235 #endif /* _LTHREAD_H */