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 # if defined (ACE_HAS_PTHREADS_DRAFT6)
00078 # define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL
00079 # define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL
00080 # define PTHREAD_CREATE_UNDETACHED 0
00081 # define PTHREAD_CREATE_DETACHED 1
00082 # define PTHREAD_CREATE_JOINABLE 0
00083 # define PTHREAD_EXPLICIT_SCHED 0
00084 # define PTHREAD_MIN_PRIORITY 0
00085 # define PTHREAD_MAX_PRIORITY 126
00086 # endif
00087
00088
00089
00090
00091
00092
00093
00094
00095 # if (defined (_POSIX_PRIORITY_SCHEDULING) || defined (ACE_TANDEM_T1248_PTHREADS)) \
00096 && !defined(_UNICOS) && !defined(UNIXWARE_7_1)
00097 # define ACE_PROC_PRI_FIFO_MIN (sched_get_priority_min(SCHED_FIFO))
00098 # define ACE_PROC_PRI_RR_MIN (sched_get_priority_min(SCHED_RR))
00099 # if defined (HPUX)
00100
00101
00102
00103
00104
00105 # define ACE_PROC_PRI_OTHER_MIN \
00106 (sched_get_priority_min(SCHED_OTHER))
00107 # else
00108 # define ACE_PROC_PRI_OTHER_MIN (sched_get_priority_min(SCHED_OTHER))
00109 # endif
00110 # else
00111
00112 # define ACE_PROC_PRI_FIFO_MIN 0
00113 # define ACE_PROC_PRI_RR_MIN 0
00114 # define ACE_PROC_PRI_OTHER_MIN 0
00115 # endif
00116
00117 # if defined (_POSIX_PRIORITY_SCHEDULING) && !defined(UNIXWARE_7_1)
00118 # define ACE_PROC_PRI_FIFO_MAX (sched_get_priority_max(SCHED_FIFO))
00119 # define ACE_PROC_PRI_RR_MAX (sched_get_priority_max(SCHED_RR))
00120 # if defined (HPUX)
00121 # define ACE_PROC_PRI_OTHER_MAX \
00122 (sched_get_priority_max(SCHED_OTHER))
00123 # else
00124 # define ACE_PROC_PRI_OTHER_MAX (sched_get_priority_max(SCHED_OTHER))
00125 # endif
00126 # else
00127 # define ACE_PROC_PRI_FIFO_MAX 59
00128 # define ACE_PROC_PRI_RR_MAX 59
00129 # define ACE_PROC_PRI_OTHER_MAX 59
00130 # endif
00131
00132 # if !defined(ACE_PROC_PRI_FIFO_DEF)
00133 # define ACE_PROC_PRI_FIFO_DEF (ACE_PROC_PRI_FIFO_MIN + (ACE_PROC_PRI_FIFO_MAX - ACE_PROC_PRI_FIFO_MIN)/2)
00134 # endif
00135 # if !defined(ACE_PROC_PRI_RR_DEF)
00136 # define ACE_PROC_PRI_RR_DEF (ACE_PROC_PRI_RR_MIN + (ACE_PROC_PRI_RR_MAX - ACE_PROC_PRI_RR_MIN)/2)
00137 # endif
00138 # if !defined(ACE_PROC_PRI_OTHER_DEF)
00139 # define ACE_PROC_PRI_OTHER_DEF (ACE_PROC_PRI_OTHER_MIN + (ACE_PROC_PRI_OTHER_MAX - ACE_PROC_PRI_OTHER_MIN)/2)
00140 # endif
00141
00142
00143 # 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)
00144 # if !defined (ACE_THR_PRI_FIFO_MIN)
00145 # define ACE_THR_PRI_FIFO_MIN (long) PRI_FIFO_MIN
00146 # endif
00147 # if !defined (ACE_THR_PRI_FIFO_MAX)
00148 # define ACE_THR_PRI_FIFO_MAX (long) PRI_FIFO_MAX
00149 # endif
00150 # if !defined (ACE_THR_PRI_RR_MIN)
00151 # define ACE_THR_PRI_RR_MIN (long) PRI_RR_MIN
00152 # endif
00153 # if !defined (ACE_THR_PRI_RR_MAX)
00154 # define ACE_THR_PRI_RR_MAX (long) PRI_RR_MAX
00155 # endif
00156 # if !defined (ACE_THR_PRI_OTHER_MIN)
00157 # define ACE_THR_PRI_OTHER_MIN (long) PRI_OTHER_MIN
00158 # endif
00159 # if !defined (ACE_THR_PRI_OTHER_MAX)
00160 # define ACE_THR_PRI_OTHER_MAX (long) PRI_OTHER_MAX
00161 # endif
00162 # elif defined (AIX)
00163
00164
00165
00166
00167
00168 # if !defined (ACE_THR_PRI_FIFO_MIN)
00169 # define ACE_THR_PRI_FIFO_MIN (long) 1
00170 # endif
00171 # if !defined (ACE_THR_PRI_FIFO_MAX)
00172 # define ACE_THR_PRI_FIFO_MAX (long) 127
00173 # endif
00174 # if !defined (ACE_THR_PRI_RR_MIN)
00175 # define ACE_THR_PRI_RR_MIN (long) 1
00176 # endif
00177 # if !defined (ACE_THR_PRI_RR_MAX)
00178 # define ACE_THR_PRI_RR_MAX (long) 127
00179 # endif
00180 # if !defined (ACE_THR_PRI_OTHER_MIN)
00181 # define ACE_THR_PRI_OTHER_MIN (long) 1
00182 # endif
00183 # if !defined (ACE_THR_PRI_OTHER_MAX)
00184 # define ACE_THR_PRI_OTHER_MAX (long) 127
00185 # endif
00186 # elif defined (sun)
00187 # if !defined (ACE_THR_PRI_FIFO_MIN)
00188 # define ACE_THR_PRI_FIFO_MIN (long) 0
00189 # endif
00190 # if !defined (ACE_THR_PRI_FIFO_MAX)
00191 # define ACE_THR_PRI_FIFO_MAX (long) 59
00192 # endif
00193 # if !defined (ACE_THR_PRI_RR_MIN)
00194 # define ACE_THR_PRI_RR_MIN (long) 0
00195 # endif
00196 # if !defined (ACE_THR_PRI_RR_MAX)
00197 # define ACE_THR_PRI_RR_MAX (long) 59
00198 # endif
00199 # if !defined (ACE_THR_PRI_OTHER_MIN)
00200 # define ACE_THR_PRI_OTHER_MIN (long) 0
00201 # endif
00202 # if !defined (ACE_THR_PRI_OTHER_MAX)
00203 # define ACE_THR_PRI_OTHER_MAX (long) 127
00204 # endif
00205 # else
00206 # if !defined (ACE_THR_PRI_FIFO_MIN)
00207 # define ACE_THR_PRI_FIFO_MIN (long) ACE_PROC_PRI_FIFO_MIN
00208 # endif
00209 # if !defined (ACE_THR_PRI_FIFO_MAX)
00210 # define ACE_THR_PRI_FIFO_MAX (long) ACE_PROC_PRI_FIFO_MAX
00211 # endif
00212 # if !defined (ACE_THR_PRI_RR_MIN)
00213 # define ACE_THR_PRI_RR_MIN (long) ACE_PROC_PRI_RR_MIN
00214 # endif
00215 # if !defined (ACE_THR_PRI_RR_MAX)
00216 # define ACE_THR_PRI_RR_MAX (long) ACE_PROC_PRI_RR_MAX
00217 # endif
00218 # if !defined (ACE_THR_PRI_OTHER_MIN)
00219 # define ACE_THR_PRI_OTHER_MIN (long) ACE_PROC_PRI_OTHER_MIN
00220 # endif
00221 # if !defined (ACE_THR_PRI_OTHER_MAX)
00222 # define ACE_THR_PRI_OTHER_MAX (long) ACE_PROC_PRI_OTHER_MAX
00223 # endif
00224 # endif
00225 # if !defined(ACE_THR_PRI_FIFO_DEF)
00226 # define ACE_THR_PRI_FIFO_DEF ((ACE_THR_PRI_FIFO_MIN + ACE_THR_PRI_FIFO_MAX)/2)
00227 # endif
00228 # if !defined(ACE_THR_PRI_RR_DEF)
00229 # define ACE_THR_PRI_RR_DEF ((ACE_THR_PRI_RR_MIN + ACE_THR_PRI_RR_MAX)/2)
00230 # endif
00231 # if !defined(ACE_THR_PRI_OTHER_DEF)
00232 # define ACE_THR_PRI_OTHER_DEF ((ACE_THR_PRI_OTHER_MIN + ACE_THR_PRI_OTHER_MAX)/2)
00233 # endif
00234
00235 typedef pthread_t ACE_hthread_t;
00236 typedef pthread_t ACE_thread_t;
00237
00238
00239 typedef pthread_key_t ACE_OS_thread_key_t;
00240
00241 # if defined (ACE_HAS_TSS_EMULATION)
00242 typedef u_int ACE_thread_key_t;
00243 # else
00244 typedef ACE_OS_thread_key_t ACE_thread_key_t;
00245 # endif
00246
00247 # if !defined (ACE_LACKS_COND_T)
00248 typedef pthread_mutex_t ACE_mutex_t;
00249 typedef pthread_cond_t ACE_cond_t;
00250 typedef pthread_condattr_t ACE_condattr_t;
00251 typedef pthread_mutexattr_t ACE_mutexattr_t;
00252 # endif
00253 typedef pthread_mutex_t ACE_thread_mutex_t;
00254
00255 # if !defined (PTHREAD_CANCEL_DISABLE)
00256 # define PTHREAD_CANCEL_DISABLE 0
00257 # endif
00258
00259 # if !defined (PTHREAD_CANCEL_ENABLE)
00260 # define PTHREAD_CANCEL_ENABLE 0
00261 # endif
00262
00263 # if !defined (PTHREAD_CANCEL_DEFERRED)
00264 # define PTHREAD_CANCEL_DEFERRED 0
00265 # endif
00266
00267 # if !defined (PTHREAD_CANCEL_ASYNCHRONOUS)
00268 # define PTHREAD_CANCEL_ASYNCHRONOUS 0
00269 # endif
00270
00271 # define THR_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE
00272 # define THR_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE
00273 # define THR_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED
00274 # define THR_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS
00275
00276 # if !defined (PTHREAD_CREATE_JOINABLE)
00277 # if defined (PTHREAD_CREATE_UNDETACHED)
00278 # define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED
00279 # else
00280 # define PTHREAD_CREATE_JOINABLE 0
00281 # endif
00282 # endif
00283
00284 # if !defined (PTHREAD_CREATE_DETACHED)
00285 # define PTHREAD_CREATE_DETACHED 1
00286 # endif
00287
00288 # if !defined (PTHREAD_PROCESS_PRIVATE) && !defined (ACE_HAS_PTHREAD_PROCESS_ENUM)
00289 # if defined (PTHREAD_MUTEXTYPE_FAST)
00290 # define PTHREAD_PROCESS_PRIVATE PTHREAD_MUTEXTYPE_FAST
00291 # else
00292 # define PTHREAD_PROCESS_PRIVATE 0
00293 # endif
00294 # endif
00295
00296 # if !defined (PTHREAD_PROCESS_SHARED) && !defined (ACE_HAS_PTHREAD_PROCESS_ENUM)
00297 # if defined (PTHREAD_MUTEXTYPE_FAST)
00298 # define PTHREAD_PROCESS_SHARED PTHREAD_MUTEXTYPE_FAST
00299 # else
00300 # define PTHREAD_PROCESS_SHARED 1
00301 # endif
00302 # endif
00303
00304 # if defined (ACE_HAS_PTHREADS_DRAFT4)
00305 # if defined (PTHREAD_PROCESS_PRIVATE)
00306 # if !defined (USYNC_THREAD)
00307 # define USYNC_THREAD PTHREAD_PROCESS_PRIVATE
00308 # endif
00309 # else
00310 # if !defined (USYNC_THREAD)
00311 # define USYNC_THREAD MUTEX_NONRECURSIVE_NP
00312 # endif
00313 # endif
00314
00315 # if defined (PTHREAD_PROCESS_SHARED)
00316 # if !defined (USYNC_PROCESS)
00317 # define USYNC_PROCESS PTHREAD_PROCESS_SHARED
00318 # endif
00319 # else
00320 # if !defined (USYNC_PROCESS)
00321 # define USYNC_PROCESS MUTEX_NONRECURSIVE_NP
00322 # endif
00323 # endif
00324 # elif !defined (ACE_HAS_STHREADS)
00325 # if !defined (USYNC_THREAD)
00326 # define USYNC_THREAD PTHREAD_PROCESS_PRIVATE
00327 # endif
00328 # if !defined (USYNC_PROCESS)
00329 # define USYNC_PROCESS PTHREAD_PROCESS_SHARED
00330 # endif
00331 # endif
00332
00333
00334 # if !defined (UNIXWARE_7_1)
00335 # undef THR_BOUND
00336 # undef THR_NEW_LWP
00337 # undef THR_DETACHED
00338 # undef THR_SUSPENDED
00339 # undef THR_DAEMON
00340
00341 # define THR_BOUND 0x00000001
00342 # define THR_NEW_LWP 0x00000002
00343 # define THR_DETACHED 0x00000040
00344 # define THR_SUSPENDED 0x00000080
00345 # define THR_DAEMON 0x00000100
00346 # define THR_SCHED_FIFO 0x00020000
00347 # define THR_SCHED_RR 0x00040000
00348 # define THR_SCHED_DEFAULT 0x00080000
00349 # endif
00350
00351 # define THR_JOINABLE 0x00010000
00352
00353 # if defined (ACE_HAS_IRIX62_THREADS)
00354 # define THR_SCOPE_SYSTEM 0x00100000
00355 # else
00356 # define THR_SCOPE_SYSTEM THR_BOUND
00357 # endif
00358
00359 # define THR_SCOPE_PROCESS 0x00200000
00360 # define THR_INHERIT_SCHED 0x00400000
00361 # define THR_EXPLICIT_SCHED 0x00800000
00362 # define THR_SCHED_IO 0x01000000
00363
00364 # if !defined (ACE_HAS_STHREADS)
00365 # if !defined (ACE_HAS_POSIX_SEM) && !defined (ACE_USES_FIFO_SEM)
00366
00367
00368 #include "ace/ACE_export.h"
00369
00370
00371
00372
00373
00374
00375
00376 class ACE_Export ACE_sema_t
00377 {
00378 public:
00379
00380 ACE_mutex_t lock_;
00381
00382
00383 ACE_cond_t count_nonzero_;
00384
00385
00386 u_long count_;
00387
00388
00389 u_long waiters_;
00390 };
00391 # endif
00392
00393 # if defined (ACE_LACKS_PTHREAD_YIELD) && defined (ACE_HAS_THR_YIELD)
00394
00395
00396 # if !defined (ACE_LACKS_RWLOCK_T)
00397 # include <synch.h>
00398 typedef rwlock_t ACE_rwlock_t;
00399 # endif
00400 # include <thread.h>
00401 # endif
00402
00403 # else
00404 # if !defined (ACE_HAS_POSIX_SEM)
00405 typedef sema_t ACE_sema_t;
00406 # endif
00407 # endif
00408
00409 # if defined (ACE_HAS_PTHREADS_UNIX98_EXT)
00410 typedef pthread_rwlock_t ACE_rwlock_t;
00411 # endif
00412
00413 # if defined (__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))
00414
00415
00416 # ifndef ACE_HAS_MUTEX_TIMEOUTS
00417 # define ACE_HAS_MUTEX_TIMEOUTS
00418 # endif
00419
00420
00421 # if defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) >= 600
00422 # if !defined (ACE_HAS_PTHREAD_SETSTACK)
00423 # define ACE_HAS_PTHREAD_SETSTACK
00424 # endif
00425 # endif
00426
00427 # if !defined (_XOPEN_SOURCE) \
00428 || (defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) < 600)
00429
00430
00431 extern "C" int pthread_mutex_timedlock (pthread_mutex_t *mutex,
00432 const struct timespec * abstime);
00433 # endif
00434
00435 # endif
00436
00437 #endif
00438
00439 #include "ace/post.h"
00440 #endif