sync0ipm.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
- /******************************************************
- A fast mutex for interprocess synchronization.
- mutex_t can be used only within single process,
- but ip mutex also between processes.
- (c) 1995 Innobase Oy
- Created 9/30/1995 Heikki Tuuri
- *******************************************************/
- #ifndef sync0ipm_h
- #define sync0ipm_h
- #include "univ.i"
- #include "os0sync.h"
- #include "sync0sync.h"
- typedef struct ip_mutex_hdl_struct ip_mutex_hdl_t;
- typedef struct ip_mutex_struct ip_mutex_t;
- /* NOTE! The structure appears here only for the compiler to
- know its size. Do not use its fields directly!
- The structure used in a fast implementation of
- an interprocess mutex. */
- struct ip_mutex_struct {
- mutex_t mutex; /* Ordinary mutex struct */
- ulint waiters; /* This field is set to 1 if
- there may be waiters */
- };
- /* The performance of the ip mutex in NT depends on how often
- a thread has to suspend itself waiting for the ip mutex
- to become free. The following variable counts system calls
- involved. */
- extern ulint ip_mutex_system_call_count;
- /**********************************************************************
- Creates, or rather, initializes
- an ip mutex object in a specified shared memory location (which must be
- appropriately aligned). The ip mutex is initialized in the reset state.
- NOTE! Explicit destroying of the ip mutex with ip_mutex_free
- is not recommended
- as the mutex resides in shared memory and we cannot make sure that
- no process is currently accessing it. Therefore just use
- ip_mutex_close to free the operating system event and mutex. */
- ulint
- ip_mutex_create(
- /*============*/
- /* out: 0 if succeed */
- ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
- char* name, /* in: name of the ip mutex */
- ip_mutex_hdl_t** handle); /* out, own: handle to the
- created mutex; handle exists
- in the private address space of
- the calling process */
- /**********************************************************************
- NOTE! Using this function is not recommended. See the note
- on ip_mutex_create. Destroys an ip mutex */
- void
- ip_mutex_free(
- /*==========*/
- ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
- /**********************************************************************
- Opens an ip mutex object in a specified shared memory location.
- Explicit closing of the ip mutex with ip_mutex_close is necessary to
- free the operating system event and mutex created, and the handle. */
- ulint
- ip_mutex_open(
- /*==========*/
- /* out: 0 if succeed */
- ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
- char* name, /* in: name of the ip mutex */
- ip_mutex_hdl_t** handle); /* out, own: handle to the
- opened mutex */
- /**********************************************************************
- Closes an ip mutex. */
- void
- ip_mutex_close(
- /*===========*/
- ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
- /******************************************************************
- Reserves an ip mutex. */
- UNIV_INLINE
- ulint
- ip_mutex_enter(
- /*===========*/
- /* out: 0 if success,
- SYNC_TIME_EXCEEDED if timeout */
- ip_mutex_hdl_t* ip_mutex_hdl, /* in: pointer to ip mutex handle */
- ulint time); /* in: maximum time to wait, in
- microseconds, or
- SYNC_INFINITE_TIME */
- /******************************************************************
- Releases an ip mutex. */
- UNIV_INLINE
- void
- ip_mutex_exit(
- /*==========*/
- ip_mutex_hdl_t* ip_mutex_hdl); /* in: pointer to ip mutex handle */
- #ifndef UNIV_NONINL
- #include "sync0ipm.ic"
- #endif
- #endif