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

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  3.    This library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Library General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2 of the License, or (at your option) any later version.
  7.    
  8.    This library is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.    Library General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU Library General Public
  14.    License along with this library; if not, write to the Free
  15.    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  16.    MA 02111-1307, USA */
  17. /* For use with thr_lock:s */
  18. #ifndef _thr_lock_h
  19. #define _thr_lock_h
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #include <my_pthread.h>
  24. #include <my_list.h>
  25. struct st_thr_lock;
  26. extern ulong locks_immediate,locks_waited ;
  27.   
  28. enum thr_lock_type { TL_IGNORE=-1,
  29.      TL_UNLOCK, /* UNLOCK ANY LOCK */
  30.      TL_READ, /* Read lock */
  31.      TL_READ_WITH_SHARED_LOCKS,
  32.      /* High prior. than TL_WRITE. Allow concurrent insert */
  33.      TL_READ_HIGH_PRIORITY,
  34.      /* READ, Don't allow concurrent insert */
  35.      TL_READ_NO_INSERT,
  36.      /* 
  37. Write lock, but allow other threads to read / write.
  38. Used by BDB tables in MySQL to mark that someone is
  39. reading/writing to the table.
  40.       */
  41.      TL_WRITE_ALLOW_WRITE,
  42.      /*
  43. Write lock, but allow other threads to read / write.
  44. Used by ALTER TABLE in MySQL to mark to allow readers
  45. to use the table until ALTER TABLE is finished.
  46.      */
  47.      TL_WRITE_ALLOW_READ,
  48.      /*
  49.        WRITE lock used by concurrent insert. Will allow
  50.        READ, if one could use concurrent insert on table.
  51.      */
  52.      TL_WRITE_CONCURRENT_INSERT,
  53.      /* Write used by INSERT DELAYED.  Allows READ locks */
  54.      TL_WRITE_DELAYED,
  55.      /* WRITE lock that has lower priority than TL_READ */
  56.      TL_WRITE_LOW_PRIORITY,
  57.      /* Normal WRITE lock */
  58.      TL_WRITE,
  59.      /* Abort new lock request with an error */
  60.      TL_WRITE_ONLY};
  61. extern ulong max_write_lock_count;
  62. extern my_bool thr_lock_inited;
  63. typedef struct st_thr_lock_data {
  64.   pthread_t thread;
  65.   struct st_thr_lock_data *next,**prev;
  66.   struct st_thr_lock *lock;
  67.   pthread_cond_t *cond;
  68.   enum thr_lock_type type;
  69.   ulong thread_id;
  70.   void *status_param; /* Param to status functions */
  71. } THR_LOCK_DATA;
  72. struct st_lock_list {
  73.   THR_LOCK_DATA *data,**last;
  74. };
  75. typedef struct st_thr_lock {
  76.   LIST list;
  77.   pthread_mutex_t mutex;
  78.   struct st_lock_list read_wait;
  79.   struct st_lock_list read;
  80.   struct st_lock_list write_wait;
  81.   struct st_lock_list write;
  82. /* write_lock_count is incremented for write locks and reset on read locks */
  83.   ulong write_lock_count;
  84.   uint read_no_write_count;
  85.   void (*get_status)(void*); /* When one gets a lock */
  86.   void (*copy_status)(void*,void*);
  87.   void (*update_status)(void*); /* Before release of write */
  88.   my_bool (*check_status)(void *);
  89. } THR_LOCK;
  90. my_bool init_thr_lock(void); /* Must be called once/thread */
  91. void thr_lock_init(THR_LOCK *lock);
  92. void thr_lock_delete(THR_LOCK *lock);
  93. void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data,
  94. void *status_param);
  95. int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type);
  96. void thr_unlock(THR_LOCK_DATA *data);
  97. int thr_multi_lock(THR_LOCK_DATA **data,uint count);
  98. void thr_multi_unlock(THR_LOCK_DATA **data,uint count);
  99. void thr_abort_locks(THR_LOCK *lock);
  100. void thr_print_locks(void); /* For debugging */
  101. my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data);
  102. my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data);
  103. #ifdef __cplusplus
  104. }
  105. #endif
  106. #endif /* _thr_lock_h */