threads.h
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:3k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* Copyright (c) 1995,1996,1997 NEC Corporation.  All rights reserved.       */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6. /*
  7.  * $Id: threads.h,v 1.13.2.2.2.4 1998/07/31 20:45:50 jduan Exp $
  8.  */
  9. #ifndef MUTEX_H
  10. #define MUTEX_H
  11. #ifdef IN_LIBRARY
  12. #undef USE_THREADS
  13. #endif
  14. #ifdef USE_THREADS
  15. #ifdef HAVE_PTHREAD_H
  16. #if defined(_OSF_SOURCE) && defined(HAVE_PTHREAD_ATTR_INIT)
  17. #define _PTHREAD_ENV_CXX
  18. #endif
  19. #if defined(_HPUX_SOURCE) && !defined(_DECTHREADS_)
  20. #ifdef HAVE_PTHREAD_KILL
  21. #define HAVE_PTHREAD_CREATE
  22. #define HAVE_PTHREAD_ATTR_INIT
  23. #endif
  24. #endif
  25. #include <pthread.h>
  26. typedef pthread_mutex_t MUTEX_T;
  27. typedef pthread_attr_t  ATTR_T;
  28. typedef pthread_t       THREAD_T;
  29. /* A good guess at the default mutex initializer...                          */
  30. #ifndef PTHREAD_MUTEX_INITIALIZER
  31. #define PTHREAD_MUTEX_INITIALIZER { 0 } 
  32. #endif
  33. #ifdef HAVE_PTHREAD_ATTR_INIT
  34. #define THREAD_ATTR_INIT(x)   pthread_attr_init(&(x))
  35. #define THREAD_ATTR_SETSTACKSIZE(x,y)
  36. #elif defined(_DECTHREADS_) && !defined(HAVE_PTHREAD_ATTR_INIT)
  37. #define THREAD_ATTR_INIT(x)   pthread_attr_create(&(x))
  38. #define THREAD_ATTR_SETSTACKSIZE(x,y) pthread_attr_setstacksize(x,y)
  39. #else
  40. #define THREAD_ATTR_INIT(x)
  41. #define THREAD_ATTR_SETSTACKSIZE(x,y)
  42. #endif
  43. #ifdef HAVE_PTHREAD_ATTR_SCOPE
  44. #define THREAD_ATTR_SETSCOPE(x, y)   pthread_attr_setscope(&(x), y)
  45. #else
  46. #define THREAD_ATTR_SETSCOPE(x,y)
  47. #endif
  48. #ifdef HAVE_PTHREAD_ATTR_SETDETACHSTATE
  49. #define THREAD_ATTR_SETDETACHSTATE(x, y)   pthread_attr_setdetachstate(&(x), y)
  50. #else
  51. #define THREAD_ATTR_SETDETACHSTATE(x,y)
  52. #endif
  53. #ifdef HAVE_PTHREAD_SIGMASK
  54. #define THREAD_SIGMASK(x, y, z)   pthread_sigmask(x, &(y), &(z))
  55. #elif defined(_AIX)
  56. #define THREAD_SIGMASK(x, y, z)   sigthreadmask(x, &(y), &(z))
  57. #else
  58. #define THREAD_SIGMASK(x, y, z)
  59. #endif
  60. #ifdef HAVE_PTHREAD_KILL
  61. #define THREAD_KILL(x, y)         pthread_kill(x,y)
  62. #else
  63. #define THREAD_KILL(x,y)          -1
  64. #endif
  65. #if !defined(_DECTHREADS_) || defined(HAVE_PTHREAD_ATTR_INIT)
  66. #define MUTEX_SETUP(x)
  67. #else
  68. #define MUTEX_SETUP(x)    pthread_mutex_init(&(x), pthread_mutexattr_default)
  69. #endif
  70. #define MUTEX_LOCK(x)     pthread_mutex_lock(&(x))
  71. #define MUTEX_UNLOCK(x)   pthread_mutex_unlock(&(x))
  72. #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
  73. #if !defined(_DECTHREADS_) || defined(HAVE_PTHREAD_ATTR_INIT)
  74. #define THREAD_CREATE(x,y,z,w) pthread_create(x,&(y),z,w)
  75. #define THREAD_DETACH(x)
  76. #else
  77. #define THREAD_CREATE(x,y,z,w) pthread_create(x,y,z,w)
  78. #define THREAD_DETACH(x)  pthread_detach(&x)
  79. #endif
  80. #if defined(_DECTHREADS_) || defined(linux) || defined(_AIX) || defined(bsdi)
  81. #define THREAD_SELF()     0
  82. #else
  83. #define THREAD_SELF()     pthread_self()
  84. #endif
  85. #define THREAD_EXIT(x)    pthread_exit(NULL)
  86. #else
  87. #undef  USE_THREADS
  88. #endif
  89. #endif
  90. #ifdef USE_THREADS
  91. #define IFTHREADED(x)     x
  92. #else
  93. typedef int MUTEX_T;
  94. #define MUTEX_INITIALIZER 0
  95. #define MUTEX_LOCK(x)
  96. #define MUTEX_UNLOCK(x)
  97. #define IFTHREADED(x)     
  98. #define THREAD_SELF()  0
  99. #define THREAD_EXIT(x) exit(x)
  100. #endif /* ! use threads */
  101. #endif /* ! mutex_h */