os0sync.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. The interface to the operating system
  3. synchronization primitives.
  4. (c) 1995 Innobase Oy
  5. Created 9/6/1995 Heikki Tuuri
  6. *******************************************************/
  7. #ifndef os0sync_h
  8. #define os0sync_h
  9. #include "univ.i"
  10. #ifdef __WIN__
  11. #define os_fast_mutex_t CRITICAL_SECTION
  12. typedef void* os_event_t;
  13. #else
  14. typedef pthread_mutex_t os_fast_mutex_t;
  15. struct os_event_struct {
  16. os_fast_mutex_t os_mutex; /* this mutex protects the next
  17. fields */
  18. ibool is_set; /* this is TRUE if the next mutex is
  19. not reserved */
  20. pthread_cond_t cond_var; /* condition variable is used in
  21. waiting for the event */
  22. };
  23. typedef struct os_event_struct os_event_struct_t;
  24. typedef os_event_struct_t*     os_event_t;
  25. #endif
  26. typedef struct os_mutex_struct os_mutex_str_t;
  27. typedef os_mutex_str_t* os_mutex_t;
  28. #define OS_SYNC_INFINITE_TIME ((ulint)(-1))
  29. #define OS_SYNC_TIME_EXCEEDED 1
  30. /*************************************************************
  31. Creates an event semaphore, i.e., a semaphore which may
  32. just have two states: signaled and nonsignaled.
  33. The created event is manual reset: it must be reset
  34. explicitly by calling sync_os_reset_event. */
  35. os_event_t
  36. os_event_create(
  37. /*============*/
  38. /* out: the event handle */
  39. char* name); /* in: the name of the event, if NULL
  40. the event is created without a name */
  41. /*************************************************************
  42. Creates an auto-reset event semaphore, i.e., an event
  43. which is automatically reset when a single thread is
  44. released. */
  45. os_event_t
  46. os_event_create_auto(
  47. /*=================*/
  48. /* out: the event handle */
  49. char* name); /* in: the name of the event, if NULL
  50. the event is created without a name */
  51. /**************************************************************
  52. Sets an event semaphore to the signaled state: lets waiting threads
  53. proceed. */
  54. void
  55. os_event_set(
  56. /*=========*/
  57. os_event_t event); /* in: event to set */
  58. /**************************************************************
  59. Resets an event semaphore to the nonsignaled state. Waiting threads will
  60. stop to wait for the event. */
  61. void
  62. os_event_reset(
  63. /*===========*/
  64. os_event_t event); /* in: event to reset */
  65. /**************************************************************
  66. Frees an event object. */
  67. void
  68. os_event_free(
  69. /*==========*/
  70. os_event_t event); /* in: event to free */
  71. /**************************************************************
  72. Waits for an event object until it is in the signaled state. */
  73. void
  74. os_event_wait(
  75. /*==========*/
  76. os_event_t event); /* in: event to wait */
  77. /**************************************************************
  78. Waits for an event object until it is in the signaled state or
  79. a timeout is exceeded. */
  80. ulint
  81. os_event_wait_time(
  82. /*===============*/
  83. /* out: 0 if success,
  84. OS_SYNC_TIME_EXCEEDED if timeout
  85. was exceeded */
  86. os_event_t event, /* in: event to wait */
  87. ulint time); /* in: timeout in microseconds, or
  88. OS_SYNC_INFINITE_TIME */
  89. /**************************************************************
  90. Waits for any event in an event array. Returns if even a single
  91. one is signaled or becomes signaled. */
  92. ulint
  93. os_event_wait_multiple(
  94. /*===================*/
  95. /* out: index of the event
  96. which was signaled */
  97. ulint n, /* in: number of events in the
  98. array */
  99. os_event_t*  event_array); /* in: pointer to an array of event
  100. handles */
  101. /*************************************************************
  102. Creates an operating system mutex semaphore.
  103. Because these are slow, the mutex semaphore of the database
  104. itself (sync_mutex_t) should be used where possible. */
  105. os_mutex_t
  106. os_mutex_create(
  107. /*============*/
  108. /* out: the mutex handle */
  109. char* name); /* in: the name of the mutex, if NULL
  110. the mutex is created without a name */
  111. /**************************************************************
  112. Acquires ownership of a mutex semaphore. */
  113. void
  114. os_mutex_enter(
  115. /*===========*/
  116. os_mutex_t mutex); /* in: mutex to acquire */
  117. /**************************************************************
  118. Releases ownership of a mutex. */
  119. void
  120. os_mutex_exit(
  121. /*==========*/
  122. os_mutex_t mutex); /* in: mutex to release */
  123. /**************************************************************
  124. Frees an mutex object. */
  125. void
  126. os_mutex_free(
  127. /*==========*/
  128. os_mutex_t mutex); /* in: mutex to free */
  129. #ifndef _WIN32
  130. /**************************************************************
  131. Acquires ownership of a fast mutex. */
  132. UNIV_INLINE
  133. ulint
  134. os_fast_mutex_trylock(
  135. /*==================*/
  136. /* out: 0 if success, != 0 if
  137. was reserved by another
  138. thread */
  139. os_fast_mutex_t* fast_mutex); /* in: mutex to acquire */
  140. /**************************************************************
  141. Releases ownership of a fast mutex. */
  142. UNIV_INLINE
  143. void
  144. os_fast_mutex_unlock(
  145. /*=================*/
  146. os_fast_mutex_t* fast_mutex); /* in: mutex to release */
  147. /*************************************************************
  148. Initializes an operating system fast mutex semaphore. */
  149. void
  150. os_fast_mutex_init(
  151. /*===============*/
  152. os_fast_mutex_t* fast_mutex); /* in: fast mutex */
  153. /**************************************************************
  154. Acquires ownership of a fast mutex. */
  155. void
  156. os_fast_mutex_lock(
  157. /*===============*/
  158. os_fast_mutex_t* fast_mutex); /* in: mutex to acquire */
  159. /**************************************************************
  160. Frees an mutex object. */
  161. void
  162. os_fast_mutex_free(
  163. /*===============*/
  164. os_fast_mutex_t* fast_mutex); /* in: mutex to free */
  165. #endif
  166. #ifndef UNIV_NONINL
  167. #include "os0sync.ic"
  168. #endif
  169. #endif