thread.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * thread.h - thread manipulation
  3.  */
  4. #ifndef GW_THREAD_H
  5. #define GW_THREAD_H
  6. #include "config.h"
  7. #if !HAVE_PTHREAD_H
  8. #error "You need Posix threads and <pthread.h>"
  9. #endif
  10. #include <pthread.h>
  11. /*
  12.  * Wrapper around pthread_mutex_t to avoid problems with recursive calls
  13.  * to pthread_mutex_trylock on Linux (at least).
  14.  */
  15. typedef struct {
  16. pthread_mutex_t mutex;
  17. long owner;
  18. int dynamic;
  19. #ifdef MUTEX_STATS
  20. unsigned char *filename;
  21. int lineno;
  22. long locks;
  23. long collisions;
  24. #endif
  25. } Mutex;
  26. /*
  27.  * Create a Mutex.
  28.  */
  29. #ifdef MUTEX_STATS
  30. #define mutex_create() gw_claim_area(mutex_make_measured(mutex_create_real(), 
  31.                                           __FILE__, __LINE__))
  32. #else
  33. #define mutex_create() gw_claim_area(mutex_create_real())
  34. #endif
  35. /*
  36.  * Create a Mutex.  Call these functions via the macro defined above.
  37.  */
  38. Mutex *mutex_create_measured(Mutex *mutex, unsigned char *filename, 
  39.                     int lineno);
  40. Mutex *mutex_create_real(void);
  41. /*
  42.  * Initialize a statically allocated Mutex.  We need those inside gwlib
  43.  * modules that are in turn used by the mutex wrapper, such as "gwmem" and
  44.  * "protected".
  45.  */
  46. #ifdef MUTEX_STATS
  47. #define mutex_init_static(mutex) 
  48.     mutex_make_measured(mutex_init_static_real(mutex), __FILE__, __LINE__)
  49. #else
  50. #define mutex_init_static(mutex) 
  51.     mutex_init_static_real(mutex)
  52. #endif
  53. Mutex *mutex_init_static_real(Mutex *mutex);
  54. /*
  55.  * Destroy a Mutex.
  56.  */
  57. void mutex_destroy(Mutex *mutex);
  58. /* lock given mutex. PANIC if fails (non-initialized mutex or other
  59.  * coding error) */ 
  60. #define mutex_lock(m) mutex_lock_real(m, __FILE__, __LINE__, __func__)
  61. void mutex_lock_real(Mutex *mutex, char *file, int line, const char *func);
  62. /* unlock given mutex, PANIC if fails (so do not call for non-locked) */
  63. /* returns 0 if ok 1 if failure for debugging */
  64. #define mutex_unlock(m) mutex_unlock_real(m, __FILE__, __LINE__, __func__)
  65. int mutex_unlock_real(Mutex *mutex, char *file, int line, const char *func);
  66. #endif