home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / pthread.h < prev    next >
C/C++ Source or Header  |  2004-01-30  |  8KB  |  202 lines

  1. /* pthread.h: POSIX pthread interface
  2.  
  3.    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.
  4.  
  5.    Written by Marco Fuykschot <marco@ddi.nl>
  6.  
  7.    This file is part of Cygwin.
  8.  
  9.    This software is a copyrighted work licensed under the terms of the
  10.    Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
  11.    details. */
  12.  
  13. #include <sys/types.h>
  14. #include <signal.h>
  15. #include <sched.h>
  16.  
  17. #ifndef _PTHREAD_H
  18. #define _PTHREAD_H
  19.  
  20. #ifdef __cplusplus
  21. extern "C"
  22. {
  23. #endif
  24.  
  25.  
  26. /* Defines. (These are correctly defined here as per
  27.    http://www.opengroup.org/onlinepubs/7908799/xsh/pthread.h.html */
  28.  
  29. /* FIXME: this should allocate a new cond variable, and return the value  that
  30.  would normally be written to the passed parameter of pthread_cond_init(lvalue, NULL); */
  31. /* #define PTHREAD_COND_INITIALIZER 0 */
  32.  
  33. #define PTHREAD_DESTRUCTOR_ITERATIONS 1
  34. /* Tls has 64 items for pre win2000 - and we don't want to use them all :]
  35.  * Before committing discuss this with the list
  36.  */
  37. #define PTHREAD_KEYS_MAX 32
  38. /* the default : joinable */
  39.  
  40. #define PTHREAD_CANCEL_ASYNCHRONOUS 1
  41. /* defaults are enable, deferred */
  42. #define PTHREAD_CANCEL_ENABLE 0
  43. #define PTHREAD_CANCEL_DEFERRED 0
  44. #define PTHREAD_CANCEL_DISABLE 1
  45. #define PTHREAD_CANCELED ((void *)-1)
  46. /* this should be a value that can never be a valid address */
  47. #define PTHREAD_COND_INITIALIZER (pthread_cond_t)21
  48. #define PTHREAD_CREATE_DETACHED 1
  49. /* the default : joinable */
  50. #define PTHREAD_CREATE_JOINABLE 0
  51. #define PTHREAD_EXPLICIT_SCHED 1
  52. #define PTHREAD_INHERIT_SCHED 0
  53. #define PTHREAD_MUTEX_RECURSIVE 0
  54. #define PTHREAD_MUTEX_ERRORCHECK 1
  55. #define PTHREAD_MUTEX_NORMAL 2
  56. #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_ERRORCHECK
  57. /* this should be too low to ever be a valid address */
  58. #define PTHREAD_MUTEX_INITIALIZER (pthread_mutex_t)20
  59. #define PTHREAD_ONCE_INIT { PTHREAD_MUTEX_INITIALIZER, 0 }
  60. #define PTHREAD_PRIO_INHERIT
  61. #define PTHREAD_PRIO_NONE
  62. #define PTHREAD_PRIO_PROTECT
  63. #define PTHREAD_PROCESS_SHARED 1
  64. #define PTHREAD_PROCESS_PRIVATE 0
  65. #define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)22
  66. /* process is the default */
  67. #define PTHREAD_SCOPE_PROCESS 0
  68. #define PTHREAD_SCOPE_SYSTEM 1
  69.  
  70.  
  71. /* Attributes */
  72. int pthread_attr_destroy (pthread_attr_t *);
  73. int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
  74. int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
  75. int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
  76. int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
  77. int pthread_attr_getscope (const pthread_attr_t *, int *);
  78. int pthread_attr_init (pthread_attr_t *);
  79. int pthread_attr_setdetachstate (pthread_attr_t *, int);
  80. int pthread_attr_setinheritsched (pthread_attr_t *, int);
  81. int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
  82. int pthread_attr_setschedpolicy (pthread_attr_t *, int);
  83. int pthread_attr_setscope (pthread_attr_t *, int);
  84.  
  85. #ifdef _POSIX_THREAD_ATTR_STACKADDR
  86. /* These functions may be implementable via some low level trickery. For now they are
  87.  * Not supported or implemented. The prototypes are here so if someone greps the
  88.  * source they will see these comments
  89.  */
  90. int pthread_attr_getstackaddr (const pthread_attr_t *, void **);
  91. int pthread_attr_setstackaddr (pthread_attr_t *, void *);
  92. #endif
  93.  
  94. #ifdef _POSIX_THREAD_ATTR_STACKSIZE
  95. int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
  96. int pthread_attr_setstacksize (pthread_attr_t *, size_t);
  97. #endif
  98.  
  99. int pthread_cancel (pthread_t);
  100. /* Macros for cleanup_push and pop;
  101.  * The function definitions are
  102. void pthread_cleanup_push (void (*routine)(void*), void *arg);
  103. void pthread_cleanup_pop (int execute);
  104. */
  105. typedef void (*__cleanup_routine_type) (void *);
  106. typedef struct _pthread_cleanup_handler
  107. {
  108.   __cleanup_routine_type function;
  109.   void *arg;
  110.   struct _pthread_cleanup_handler *next;
  111. } __pthread_cleanup_handler;
  112.  
  113. void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
  114. void _pthread_cleanup_pop (int execute);
  115.  
  116. #define pthread_cleanup_push(_fn, _arg) { __pthread_cleanup_handler __cleanup_handler = \
  117.                                          { _fn, _arg, NULL }; \
  118.                                          _pthread_cleanup_push( &__cleanup_handler );
  119. #define pthread_cleanup_pop(_execute) _pthread_cleanup_pop( _execute ); }
  120.  
  121. /* Condition variables */
  122. int pthread_cond_broadcast (pthread_cond_t *);
  123. int pthread_cond_destroy (pthread_cond_t *);
  124. int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
  125. int pthread_cond_signal (pthread_cond_t *);
  126. int pthread_cond_timedwait (pthread_cond_t *,
  127.                 pthread_mutex_t *, const struct timespec *);
  128. int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
  129. int pthread_condattr_destroy (pthread_condattr_t *);
  130. int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
  131. int pthread_condattr_init (pthread_condattr_t *);
  132. int pthread_condattr_setpshared (pthread_condattr_t *, int);
  133.  
  134. int pthread_create (pthread_t *, const pthread_attr_t *,
  135.             void *(*)(void *), void *);
  136. int pthread_detach (pthread_t);
  137. int pthread_equal (pthread_t, pthread_t);
  138. void pthread_exit (void *);
  139. int pthread_getschedparam (pthread_t, int *, struct sched_param *);
  140. void *pthread_getspecific (pthread_key_t);
  141. int pthread_join (pthread_t, void **);
  142. int pthread_key_create (pthread_key_t *, void (*)(void *));
  143. int pthread_key_delete (pthread_key_t);
  144.  
  145. /* Mutex's */
  146. int pthread_mutex_destroy (pthread_mutex_t *);
  147. int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
  148. int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
  149. int pthread_mutex_lock (pthread_mutex_t *);
  150. int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
  151. int pthread_mutex_trylock (pthread_mutex_t *);
  152. int pthread_mutex_unlock (pthread_mutex_t *);
  153. int pthread_mutexattr_destroy (pthread_mutexattr_t *);
  154. int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
  155. int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
  156. int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
  157. int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
  158. int pthread_mutexattr_init (pthread_mutexattr_t *);
  159. int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
  160. int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
  161. int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
  162. int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
  163.  
  164. /* RW Locks */
  165. int pthread_rwlock_destroy (pthread_rwlock_t *rwlock);
  166. int pthread_rwlock_init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
  167. int pthread_rwlock_rdlock (pthread_rwlock_t *rwlock);
  168. int pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock);
  169. int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock);
  170. int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock);
  171. int pthread_rwlock_unlock (pthread_rwlock_t *rwlock);
  172. int pthread_rwlockattr_init (pthread_rwlockattr_t *rwlockattr);
  173. int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr,
  174.                                    int *pshared);
  175. int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared);
  176. int pthread_rwlockattr_destroy (pthread_rwlockattr_t *rwlockattr);
  177.  
  178. int pthread_once (pthread_once_t *, void (*)(void));
  179.  
  180. /* Concurrency levels - X/Open interface */
  181. int pthread_getconcurrency (void);
  182. int pthread_setconcurrency (int);
  183.  
  184.  
  185. pthread_t pthread_self (void);
  186. int pthread_setcancelstate (int, int *);
  187. int pthread_setcanceltype (int, int *);
  188. int pthread_setschedparam (pthread_t, int, const struct sched_param *);
  189. int pthread_setspecific (pthread_key_t, const void *);
  190. void pthread_testcancel (void);
  191.  
  192. /* Non posix calls */
  193.  
  194. int pthread_suspend (pthread_t);
  195. int pthread_continue (pthread_t);
  196.  
  197. #ifdef __cplusplus
  198. }
  199. #endif
  200.  
  201. #endif /* _PTHREAD_H */
  202.