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) && !defined (ACE_HAS_PTHREADS_UNIX98_EXT)
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 #      define ACE_LACKS_PTHREAD_ATTR_SETSTACK
00423 #    endif 
00424 
00425 #    if !defined (_XOPEN_SOURCE) \
00426      || (defined (_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) < 600)
00427        
00428        
00429        extern "C" int pthread_mutex_timedlock (pthread_mutex_t *mutex,
00430                                              const struct timespec * abstime);
00431 #    endif  
00432 
00433 #  endif  
00434 
00435 #elif defined (ACE_HAS_STHREADS)
00436 #  if !defined (ACE_THR_PRI_FIFO_MIN)
00437 #    define ACE_THR_PRI_FIFO_MIN  (long) 0
00438 #  endif 
00439 #  if !defined (ACE_THR_PRI_FIFO_MAX)
00440 #    define ACE_THR_PRI_FIFO_MAX  (long) 59
00441 #  endif 
00442 #  if !defined (ACE_THR_PRI_RR_MIN)
00443 #    define ACE_THR_PRI_RR_MIN    (long) 0
00444 #  endif 
00445 #  if !defined (ACE_THR_PRI_RR_MAX)
00446 #    define ACE_THR_PRI_RR_MAX    (long) 59
00447 #  endif 
00448 #  if !defined (ACE_THR_PRI_OTHER_MIN)
00449 #    define ACE_THR_PRI_OTHER_MIN (long) 0
00450 #  endif 
00451 #  if !defined (ACE_THR_PRI_OTHER_MAX)
00452 #    define ACE_THR_PRI_OTHER_MAX (long) 127
00453 #  endif 
00454 #endif 
00455 
00456 #include  "ace/post.h"
00457 #endif