Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef ACE_OS_INCLUDE_OS_PTHREAD_H
00017 #define ACE_OS_INCLUDE_OS_PTHREAD_H
00018
00019 #include "ace/pre.h"
00020
00021 #include "ace/config-all.h"
00022
00023 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00024 # pragma once
00025 #endif
00026
00027 #if defined (ACE_HAS_PRIOCNTL)
00028
00029
00030 # if defined (sun)
00031 # include <thread.h>
00032 # endif
00033
00034
00035 # include <sys/rtpriocntl.h>
00036 # include <sys/tspriocntl.h>
00037 #endif
00038
00039 #include "ace/os_include/sys/os_types.h"
00040
00041
00042 # if defined (ACE_HAS_PTHREADS)
00043 # define ACE_DONT_INCLUDE_ACE_SIGNAL_H
00044 # include "ace/os_include/os_signal.h"
00045 # undef ACE_DONT_INCLUDE_ACE_SIGNAL_H
00046 # if defined (DIGITAL_UNIX)
00047 # define pthread_self __pthread_self
00048 extern "C" pthread_t pthread_self (void);
00049 # endif
00050 # endif
00051
00052
00053 #if !defined (ACE_LACKS_PTHREAD_H)
00054 extern "C" {
00055 # if defined (ACE_TANDEM_T1248_PTHREADS)
00056 # include <spthread.h>
00057 # else
00058 # include <pthread.h>
00059 # endif
00060 }
00061 #endif
00062
00063 #if defined (ACE_HAS_PTHREAD_NP_H)
00064
00065 # include <pthread_np.h>
00066 #endif
00067
00068
00069
00070 #if defined (ACE_HAS_PTHREADS)
00071 # define ACE_SCHED_OTHER SCHED_OTHER
00072 # define ACE_SCHED_FIFO SCHED_FIFO
00073 # define ACE_SCHED_RR SCHED_RR
00074
00075
00076
00077
00078
00079
00080
00081
00082 # if (defined (_POSIX_PRIORITY_SCHEDULING) || defined (ACE_TANDEM_T1248_PTHREADS)) \
00083 && !defined(_UNICOS) && !defined(UNIXWARE_7_1)
00084 # define ACE_PROC_PRI_FIFO_MIN (sched_get_priority_min(SCHED_FIFO))
00085 # define ACE_PROC_PRI_RR_MIN (sched_get_priority_min(SCHED_RR))
00086 # if defined (HPUX)
00087
00088
00089
00090
00091
00092 # define ACE_PROC_PRI_OTHER_MIN \
00093 (sched_get_priority_min(SCHED_OTHER))
00094 # else
00095 # define ACE_PROC_PRI_OTHER_MIN (sched_get_priority_min(SCHED_OTHER))
00096 # endif
00097 # else
00098
00099 # define ACE_PROC_PRI_FIFO_MIN 0
00100 # define ACE_PROC_PRI_RR_MIN 0
00101 # define ACE_PROC_PRI_OTHER_MIN 0
00102 # endif
00103
00104 # if defined (_POSIX_PRIORITY_SCHEDULING) && !defined(UNIXWARE_7_1)
00105 # define ACE_PROC_PRI_FIFO_MAX (sched_get_priority_max(SCHED_FIFO))
00106 # define ACE_PROC_PRI_RR_MAX (sched_get_priority_max(SCHED_RR))
00107 # if defined (HPUX)
00108 # define ACE_PROC_PRI_OTHER_MAX \
00109 (sched_get_priority_max(SCHED_OTHER))
00110 # else
00111 # define ACE_PROC_PRI_OTHER_MAX (sched_get_priority_max(SCHED_OTHER))
00112 # endif
00113 # else
00114 # define ACE_PROC_PRI_FIFO_MAX 59
00115 # define ACE_PROC_PRI_RR_MAX 59
00116 # define ACE_PROC_PRI_OTHER_MAX 59
00117 # endif
00118
00119 # if !defined(ACE_PROC_PRI_FIFO_DEF)
00120 # define ACE_PROC_PRI_FIFO_DEF (ACE_PROC_PRI_FIFO_MIN + (ACE_PROC_PRI_FIFO_MAX - ACE_PROC_PRI_FIFO_MIN)/2)
00121 # endif
00122 # if !defined(ACE_PROC_PRI_RR_DEF)
00123 # define ACE_PROC_PRI_RR_DEF (ACE_PROC_PRI_RR_MIN + (ACE_PROC_PRI_RR_MAX - ACE_PROC_PRI_RR_MIN)/2)
00124 # endif
00125 # if !defined(ACE_PROC_PRI_OTHER_DEF)
00126 # define ACE_PROC_PRI_OTHER_DEF (ACE_PROC_PRI_OTHER_MIN + (ACE_PROC_PRI_OTHER_MAX - ACE_PROC_PRI_OTHER_MIN)/2)
00127 # endif
00128
00129
00130 # if defined(PRI_FIFO_MIN) && defined(PRI_FIFO_MAX) && defined(PRI_RR_MIN) && defined(PRI_RR_MAX) && defined(PRI_OTHER_MIN) && defined(PRI_OTHER_MAX)
00131 # if !defined (ACE_THR_PRI_FIFO_MIN)
00132 # define ACE_THR_PRI_FIFO_MIN (long) PRI_FIFO_MIN
00133 # endif
00134 # if !defined (ACE_THR_PRI_FIFO_MAX)
00135 # define ACE_THR_PRI_FIFO_MAX (long) PRI_FIFO_MAX
00136 # endif
00137 # if !defined (ACE_THR_PRI_RR_MIN)
00138 # define ACE_THR_PRI_RR_MIN (long) PRI_RR_MIN
00139 # endif
00140 # if !defined (ACE_THR_PRI_RR_MAX)
00141 # define ACE_THR_PRI_RR_MAX (long) PRI_RR_MAX
00142 # endif
00143 # if !defined (ACE_THR_PRI_OTHER_MIN)
00144 # define ACE_THR_PRI_OTHER_MIN (long) PRI_OTHER_MIN
00145 # endif
00146 # if !defined (ACE_THR_PRI_OTHER_MAX)
00147 # define ACE_THR_PRI_OTHER_MAX (long) PRI_OTHER_MAX
00148 # endif
00149 # elif defined (AIX)
00150
00151
00152
00153
00154
00155 # if !defined (ACE_THR_PRI_FIFO_MIN)
00156 # define ACE_THR_PRI_FIFO_MIN (long) 1
00157 # endif
00158 # if !defined (ACE_THR_PRI_FIFO_MAX)
00159 # define ACE_THR_PRI_FIFO_MAX (long) 127
00160 # endif
00161 # if !defined (ACE_THR_PRI_RR_MIN)
00162 # define ACE_THR_PRI_RR_MIN (long) 1
00163 # endif
00164 # if !defined (ACE_THR_PRI_RR_MAX)
00165 # define ACE_THR_PRI_RR_MAX (long) 127
00166 # endif
00167 # if !defined (ACE_THR_PRI_OTHER_MIN)
00168 # define ACE_THR_PRI_OTHER_MIN (long) 1
00169 # endif
00170 # if !defined (ACE_THR_PRI_OTHER_MAX)
00171 # define ACE_THR_PRI_OTHER_MAX (long) 127
00172 # endif
00173 # elif defined (sun)
00174 # if !defined (ACE_THR_PRI_FIFO_MIN)
00175 # define ACE_THR_PRI_FIFO_MIN (long) 0
00176 # endif
00177 # if !defined (ACE_THR_PRI_FIFO_MAX)
00178 # define ACE_THR_PRI_FIFO_MAX (long) 59
00179 # endif
00180 # if !defined (ACE_THR_PRI_RR_MIN)
00181 # define ACE_THR_PRI_RR_MIN (long) 0
00182 # endif
00183 # if !defined (ACE_THR_PRI_RR_MAX)
00184 # define ACE_THR_PRI_RR_MAX (long) 59
00185 # endif
00186 # if !defined (ACE_THR_PRI_OTHER_MIN)
00187 # define ACE_THR_PRI_OTHER_MIN (long) 0
00188 # endif
00189 # if !defined (ACE_THR_PRI_OTHER_MAX)
00190 # define ACE_THR_PRI_OTHER_MAX (long) 127
00191 # endif
00192 # else
00193 # if !defined (ACE_THR_PRI_FIFO_MIN)
00194 # define ACE_THR_PRI_FIFO_MIN (long) ACE_PROC_PRI_FIFO_MIN
00195 # endif
00196 # if !defined (ACE_THR_PRI_FIFO_MAX)
00197 # define ACE_THR_PRI_FIFO_MAX (long) ACE_PROC_PRI_FIFO_MAX
00198 # endif
00199 # if !defined (ACE_THR_PRI_RR_MIN)
00200 # define ACE_THR_PRI_RR_MIN (long) ACE_PROC_PRI_RR_MIN
00201 # endif
00202 # if !defined (ACE_THR_PRI_RR_MAX)
00203 # define ACE_THR_PRI_RR_MAX (long) ACE_PROC_PRI_RR_MAX
00204 # endif
00205 # if !defined (ACE_THR_PRI_OTHER_MIN)
00206 # define ACE_THR_PRI_OTHER_MIN (long) ACE_PROC_PRI_OTHER_MIN
00207 # endif
00208 # if !defined (ACE_THR_PRI_OTHER_MAX)
00209 # define ACE_THR_PRI_OTHER_MAX (long) ACE_PROC_PRI_OTHER_MAX
00210 # endif
00211 # endif
00212 # if !defined(ACE_THR_PRI_FIFO_DEF)
00213 # define ACE_THR_PRI_FIFO_DEF ((ACE_THR_PRI_FIFO_MIN + ACE_THR_PRI_FIFO_MAX)/2)
00214 # endif
00215 # if !defined(ACE_THR_PRI_RR_DEF)
00216 # define ACE_THR_PRI_RR_DEF ((ACE_THR_PRI_RR_MIN + ACE_THR_PRI_RR_MAX)/2)
00217 # endif
00218 # if !defined(ACE_THR_PRI_OTHER_DEF)
00219 # define ACE_THR_PRI_OTHER_DEF ((ACE_THR_PRI_OTHER_MIN + ACE_THR_PRI_OTHER_MAX)/2)
00220 # endif
00221
00222 typedef pthread_t ACE_hthread_t;
00223 typedef pthread_t ACE_thread_t;
00224
00225
00226 typedef pthread_key_t ACE_OS_thread_key_t;
00227
00228 # if defined (ACE_HAS_TSS_EMULATION)
00229 typedef u_int ACE_thread_key_t;
00230 # else
00231 typedef ACE_OS_thread_key_t ACE_thread_key_t;
00232 # endif
00233
00234 # if !defined (ACE_LACKS_COND_T)
00235 typedef pthread_mutex_t ACE_mutex_t;
00236 typedef pthread_cond_t ACE_cond_t;
00237 typedef pthread_condattr_t ACE_condattr_t;
00238 typedef pthread_mutexattr_t ACE_mutexattr_t;
00239 # endif
00240 typedef pthread_mutex_t ACE_thread_mutex_t;
00241
00242 # if !defined (PTHREAD_CANCEL_DISABLE)
00243 # define PTHREAD_CANCEL_DISABLE 0
00244 # endif
00245
00246 # if !defined (PTHREAD_CANCEL_ENABLE)
00247 # define PTHREAD_CANCEL_ENABLE 0
00248 # endif
00249
00250 # if !defined (PTHREAD_CANCEL_DEFERRED)
00251 # define PTHREAD_CANCEL_DEFERRED 0
00252 # endif
00253
00254 # if !defined (PTHREAD_CANCEL_ASYNCHRONOUS)
00255 # define PTHREAD_CANCEL_ASYNCHRONOUS 0
00256 # endif
00257
00258 # define THR_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE
00259 # define THR_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE
00260 # define THR_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED
00261 # define THR_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS
00262
00263 # if !defined (PTHREAD_CREATE_JOINABLE)
00264 # if defined (PTHREAD_CREATE_UNDETACHED)
00265 # define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED
00266 # else
00267 # define PTHREAD_CREATE_JOINABLE 0
00268 # endif
00269 # endif
00270
00271 # if !defined (PTHREAD_CREATE_DETACHED)
00272 # define PTHREAD_CREATE_DETACHED 1
00273 # endif
00274
00275 # if !defined (PTHREAD_PROCESS_PRIVATE) && !defined (ACE_HAS_PTHREAD_PROCESS_ENUM)
00276 # if defined (PTHREAD_MUTEXTYPE_FAST)
00277 # define PTHREAD_PROCESS_PRIVATE PTHREAD_MUTEXTYPE_FAST
00278 # else
00279 # define PTHREAD_PROCESS_PRIVATE 0
00280 # endif
00281 # endif
00282
00283 # if !defined (PTHREAD_PROCESS_SHARED) && !defined (ACE_HAS_PTHREAD_PROCESS_ENUM)
00284 # if defined (PTHREAD_MUTEXTYPE_FAST)
00285 # define PTHREAD_PROCESS_SHARED PTHREAD_MUTEXTYPE_FAST
00286 # else
00287 # define PTHREAD_PROCESS_SHARED 1
00288 # endif
00289 # endif
00290
00291 # if !defined (ACE_HAS_STHREADS)
00292 # if !defined (USYNC_THREAD)
00293 # define USYNC_THREAD PTHREAD_PROCESS_PRIVATE
00294 # endif
00295 # if !defined (USYNC_PROCESS)
00296 # define USYNC_PROCESS PTHREAD_PROCESS_SHARED
00297 # endif
00298 # endif
00299
00300
00301 # if !defined (UNIXWARE_7_1)
00302 # undef THR_BOUND
00303 # undef THR_NEW_LWP
00304 # undef THR_DETACHED
00305 # undef THR_SUSPENDED
00306 # undef THR_DAEMON
00307
00308 # define THR_BOUND 0x00000001
00309 # define THR_NEW_LWP 0x00000002
00310 # define THR_DETACHED 0x00000040
00311 # define THR_SUSPENDED 0x00000080
00312 # define THR_DAEMON 0x00000100
00313 # define THR_SCHED_FIFO 0x00020000
00314 # define THR_SCHED_RR 0x00040000
00315 # define THR_SCHED_DEFAULT 0x00080000
00316 # endif
00317
00318 # define THR_JOINABLE 0x00010000
00319
00320 # if defined (ACE_HAS_IRIX62_THREADS)
00321 # define THR_SCOPE_SYSTEM 0x00100000
00322 # else
00323 # define THR_SCOPE_SYSTEM THR_BOUND
00324 # endif
00325
00326 # define THR_SCOPE_PROCESS 0x00200000
00327 # define THR_INHERIT_SCHED 0x00400000
00328 # define THR_EXPLICIT_SCHED 0x00800000
00329 # define THR_SCHED_IO 0x01000000
00330
00331 # if !defined (ACE_HAS_STHREADS)
00332 # if !defined (ACE_HAS_POSIX_SEM) && !defined (ACE_USES_FIFO_SEM)
00333
00334
00335 #include "ace/ACE_export.h"
00336
00337
00338
00339
00340
00341
00342
00343 class ACE_Export ACE_sema_t
00344 {
00345 public:
00346
00347 ACE_mutex_t lock_;
00348
00349
00350 ACE_cond_t count_nonzero_;
00351
00352
00353 u_long count_;
00354
00355
00356 u_long waiters_;
00357 };
00358 # endif
00359
00360 # if defined (ACE_LACKS_PTHREAD_YIELD) && defined (ACE_HAS_THR_YIELD)
00361
00362
00363 # if !defined (ACE_LACKS_RWLOCK_T) && !defined (ACE_HAS_PTHREADS_UNIX98_EXT)
00364 # include <synch.h>
00365 typedef rwlock_t ACE_rwlock_t;
00366 # endif
00367 # include <thread.h>
00368 # endif
00369
00370 # else
00371 # if !defined (ACE_HAS_POSIX_SEM)
00372 typedef sema_t ACE_sema_t;
00373 # endif
00374 # endif
00375
00376 # if defined (ACE_HAS_PTHREADS_UNIX98_EXT)
00377 typedef pthread_rwlock_t ACE_rwlock_t;
00378 # endif
00379
00380 # if defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
00381
00382
00383 # ifndef ACE_HAS_MUTEX_TIMEOUTS
00384 # define ACE_HAS_MUTEX_TIMEOUTS
00385 # endif
00386
00387
00388 # if defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) < 600
00389 # define ACE_LACKS_PTHREAD_ATTR_SETSTACK
00390 # endif
00391
00392 # if !defined (_XOPEN_SOURCE) \
00393 || (defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) < 600)
00394
00395
00396 extern "C" int pthread_mutex_timedlock (pthread_mutex_t *mutex,
00397 const struct timespec * abstime);
00398 # endif
00399
00400 # endif
00401
00402 #elif defined (ACE_HAS_STHREADS)
00403 # if !defined (ACE_THR_PRI_FIFO_MIN)
00404 # define ACE_THR_PRI_FIFO_MIN (long) 0
00405 # endif
00406 # if !defined (ACE_THR_PRI_FIFO_MAX)
00407 # define ACE_THR_PRI_FIFO_MAX (long) 59
00408 # endif
00409 # if !defined (ACE_THR_PRI_RR_MIN)
00410 # define ACE_THR_PRI_RR_MIN (long) 0
00411 # endif
00412 # if !defined (ACE_THR_PRI_RR_MAX)
00413 # define ACE_THR_PRI_RR_MAX (long) 59
00414 # endif
00415 # if !defined (ACE_THR_PRI_OTHER_MIN)
00416 # define ACE_THR_PRI_OTHER_MIN (long) 0
00417 # endif
00418 # if !defined (ACE_THR_PRI_OTHER_MAX)
00419 # define ACE_THR_PRI_OTHER_MAX (long) 127
00420 # endif
00421 #endif
00422
00423 #include "ace/post.h"
00424 #endif