3 * Copyright 1998-2000 The OpenLDAP Foundation, Redwood City, California, USA
6 * Redistribution and use in source and binary forms are permitted only
7 * as authorized by the OpenLDAP Public License. A copy of this
8 * license is available at http://www.OpenLDAP.org/license.html or
9 * in file LICENSE in the top-level directory of the distribution.
11 /* ldap_int_thread.h - ldap internal thread wrappers header file */
13 #ifndef _LDAP_INT_THREAD_H
14 #define _LDAP_INT_THREAD_H
16 #include "ldap_cdefs.h"
18 #if defined( HAVE_PTHREADS )
19 /**********************************
21 * definitions for POSIX Threads *
23 **********************************/
32 typedef pthread_t ldap_int_thread_t;
33 typedef pthread_mutex_t ldap_int_thread_mutex_t;
34 typedef pthread_cond_t ldap_int_thread_cond_t;
36 #if defined( _POSIX_REENTRANT_FUNCTIONS ) || \
37 defined( _POSIX_THREAD_SAFE_FUNCTIONS ) || \
38 defined( _POSIX_THREADSAFE_FUNCTIONS )
39 #define HAVE_REENTRANT_FUNCTIONS 1
42 #if defined( HAVE_PTHREAD_GETCONCURRENCY ) || \
43 defined( HAVE_THR_GETCONCURRENCY )
44 #define HAVE_GETCONCURRENCY 1
47 #if defined( HAVE_PTHREAD_SETCONCURRENCY ) || \
48 defined( HAVE_THR_SETCONCURRENCY )
49 #define HAVE_SETCONCURRENCY 1
52 #if defined( HAVE_PTHREAD_RWLOCK_DESTROY )
53 #define LDAP_THREAD_HAVE_RDWR 1
54 typedef pthread_rwlock_t ldap_pvt_thread_rdwr_t;
59 #elif defined ( HAVE_MACH_CTHREADS )
60 /**********************************
62 * definitions for Mach CThreads *
64 **********************************/
66 #include <mach/cthreads.h>
70 typedef cthread_t ldap_int_thread_t;
71 typedef struct mutex ldap_int_thread_mutex_t;
72 typedef struct condition ldap_int_thread_cond_t;
76 #elif defined( HAVE_GNU_PTH )
77 /***********************************
79 * thread definitions for GNU Pth *
81 ***********************************/
83 #define PTH_SYSCALL_SOFT 1
88 typedef pth_t ldap_int_thread_t;
89 typedef pth_mutex_t ldap_int_thread_mutex_t;
90 typedef pth_cond_t ldap_int_thread_cond_t;
95 #elif defined( HAVE_THR )
96 /********************************************
98 * thread definitions for Solaris LWP (THR) *
100 ********************************************/
107 typedef thread_t ldap_int_thread_t;
108 typedef mutex_t ldap_int_thread_mutex_t;
109 typedef cond_t ldap_int_thread_cond_t;
111 #define HAVE_REENTRANT_FUNCTIONS 1
113 #ifdef HAVE_THR_GETCONCURRENCY
114 #define HAVE_GETCONCURRENCY 1
116 #ifdef HAVE_THR_SETCONCURRENCY
117 #define HAVE_SETCONCURRENCY 1
122 #elif defined( HAVE_LWP )
123 /*************************************
125 * thread definitions for SunOS LWP *
127 *************************************/
130 #include <lwp/stackdep.h>
134 typedef thread_t ldap_int_thread_t;
135 typedef mon_t ldap_int_thread_mutex_t;
136 struct ldap_int_thread_lwp_cv {
140 typedef struct ldap_int_thread_lwp_cv ldap_int_thread_cond_t;
142 #define HAVE_REENTRANT_FUNCTIONS 1
146 #elif defined(HAVE_NT_THREADS)
153 typedef unsigned long ldap_int_thread_t;
154 typedef HANDLE ldap_int_thread_mutex_t;
155 typedef HANDLE ldap_int_thread_cond_t;
161 /***********************************
163 * thread definitions for no *
164 * underlying library support *
166 ***********************************/
174 typedef int ldap_int_thread_t;
175 typedef int ldap_int_thread_mutex_t;
176 typedef int ldap_int_thread_cond_t;
180 #endif /* no threads support */
185 ldap_int_thread_initialize LDAP_P(( void ));
188 ldap_int_thread_destroy LDAP_P(( void ));
190 LIBLDAP_F( unsigned int )
191 ldap_int_thread_sleep LDAP_P(( unsigned int s ));
193 #ifdef HAVE_GETCONCURRENCY
195 ldap_int_thread_get_concurrency LDAP_P(( void ));
198 #ifdef HAVE_SETCONCURRENCY
199 # ifndef LDAP_THREAD_CONCURRENCY
200 /* three concurrent threads should be enough */
201 # define LDAP_THREAD_CONCURRENCY 3
204 ldap_int_thread_set_concurrency LDAP_P(( int ));
208 ldap_int_thread_create LDAP_P((
209 ldap_int_thread_t * thread,
211 void *(*start_routine)( void * ),
215 ldap_int_thread_exit LDAP_P(( void *retval ));
218 ldap_int_thread_join LDAP_P(( ldap_int_thread_t thread, void **status ));
221 ldap_int_thread_kill LDAP_P(( ldap_int_thread_t thread, int signo ));
224 ldap_int_thread_yield LDAP_P(( void ));
227 ldap_int_thread_cond_init LDAP_P(( ldap_int_thread_cond_t *cond ));
230 ldap_int_thread_cond_destroy LDAP_P(( ldap_int_thread_cond_t *cond ));
233 ldap_int_thread_cond_signal LDAP_P(( ldap_int_thread_cond_t *cond ));
236 ldap_int_thread_cond_broadcast LDAP_P(( ldap_int_thread_cond_t *cond ));
239 ldap_int_thread_cond_wait LDAP_P((
240 ldap_int_thread_cond_t *cond,
241 ldap_int_thread_mutex_t *mutex ));
244 ldap_int_thread_mutex_init LDAP_P(( ldap_int_thread_mutex_t *mutex ));
247 ldap_int_thread_mutex_destroy LDAP_P(( ldap_int_thread_mutex_t *mutex ));
250 ldap_int_thread_mutex_lock LDAP_P(( ldap_int_thread_mutex_t *mutex ));
253 ldap_int_thread_mutex_trylock LDAP_P(( ldap_int_thread_mutex_t *mutex ));
256 ldap_int_thread_mutex_unlock LDAP_P(( ldap_int_thread_mutex_t *mutex ));
260 #endif /* _LDAP_INT_THREAD_H */