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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. A fast mutex for interprocess synchronization.
  3. mutex_t can be used only within single process,
  4. but ip mutex also between processes.
  5. (c) 1995 Innobase Oy
  6. Created 9/30/1995 Heikki Tuuri
  7. *******************************************************/
  8. #ifndef sync0ipm_h
  9. #define sync0ipm_h
  10. #include "univ.i"
  11. #include "os0sync.h"
  12. #include "sync0sync.h"
  13. typedef struct ip_mutex_hdl_struct ip_mutex_hdl_t;
  14. typedef struct ip_mutex_struct ip_mutex_t;
  15. /* NOTE! The structure appears here only for the compiler to
  16. know its size. Do not use its fields directly!
  17. The structure used in a fast implementation of
  18. an interprocess mutex. */
  19. struct ip_mutex_struct {
  20. mutex_t mutex; /* Ordinary mutex struct */
  21. ulint waiters; /* This field is set to 1 if
  22. there may be waiters */
  23. };
  24. /* The performance of the ip mutex in NT depends on how often
  25. a thread has to suspend itself waiting for the ip mutex
  26. to become free. The following variable counts system calls
  27. involved. */
  28. extern ulint ip_mutex_system_call_count;
  29. /**********************************************************************
  30. Creates, or rather, initializes
  31. an ip mutex object in a specified shared memory location (which must be
  32. appropriately aligned). The ip mutex is initialized in the reset state.
  33. NOTE! Explicit destroying of the ip mutex with ip_mutex_free
  34. is not recommended
  35. as the mutex resides in shared memory and we cannot make sure that
  36. no process is currently accessing it. Therefore just use
  37. ip_mutex_close to free the operating system event and mutex. */
  38. ulint
  39. ip_mutex_create(
  40. /*============*/
  41. /* out: 0 if succeed */
  42. ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
  43. char* name, /* in: name of the ip mutex */
  44. ip_mutex_hdl_t** handle); /* out, own: handle to the
  45. created mutex; handle exists
  46. in the private address space of
  47. the calling process */
  48. /**********************************************************************
  49. NOTE! Using this function is not recommended. See the note
  50. on ip_mutex_create. Destroys an ip mutex */
  51. void
  52. ip_mutex_free(
  53. /*==========*/
  54. ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
  55. /**********************************************************************
  56. Opens an ip mutex object in a specified shared memory location.
  57. Explicit closing of the ip mutex with ip_mutex_close is necessary to
  58. free the operating system event and mutex created, and the handle. */
  59. ulint
  60. ip_mutex_open(
  61. /*==========*/
  62. /* out: 0 if succeed */
  63. ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
  64. char* name, /* in: name of the ip mutex */
  65. ip_mutex_hdl_t** handle); /* out, own: handle to the
  66. opened mutex */
  67. /**********************************************************************
  68. Closes an ip mutex. */
  69. void
  70. ip_mutex_close(
  71. /*===========*/
  72. ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
  73. /******************************************************************
  74. Reserves an ip mutex. */
  75. UNIV_INLINE
  76. ulint
  77. ip_mutex_enter(
  78. /*===========*/
  79. /* out: 0 if success, 
  80. SYNC_TIME_EXCEEDED if timeout */
  81. ip_mutex_hdl_t* ip_mutex_hdl, /* in: pointer to ip mutex handle */
  82. ulint time); /* in: maximum time to wait, in
  83. microseconds, or 
  84. SYNC_INFINITE_TIME */
  85. /******************************************************************
  86. Releases an ip mutex. */
  87. UNIV_INLINE
  88. void
  89. ip_mutex_exit(
  90. /*==========*/
  91. ip_mutex_hdl_t* ip_mutex_hdl); /* in: pointer to ip mutex handle */
  92. #ifndef UNIV_NONINL
  93. #include "sync0ipm.ic"
  94. #endif
  95. #endif