NdbMutex.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "NdbMutex.h"
  14. #include <pthread.h>
  15. #include <stdlib.h>
  16. NdbMutex* NdbMutex_Create(void)
  17. {
  18.   NdbMutex* pNdbMutex;
  19.   pNdbMutex = create_sem(1);
  20.   
  21.   return pNdbMutex;
  22. }
  23. int NdbMutex_Destroy(NdbMutex* p_mutex)
  24. {
  25.   if (p_mutex == NULL)
  26.     return -1;
  27.   
  28.   kill_sem(p_mutex);
  29.      
  30.   return 0;
  31. }
  32. int NdbMutex_Lock(NdbMutex* p_mutex)
  33. {
  34.   if (p_mutex == NULL)
  35.     return -1;
  36.   wait_sem(p_mutex);
  37.   return 0;
  38. }
  39. int NdbMutex_Unlock(NdbMutex* p_mutex)
  40. {
  41.   if (p_mutex == NULL)
  42.     return -1;
  43.   signal_sem(p_mutex);
  44.      
  45.   return 0;
  46. }
  47. int NdbMutex_Trylock(NdbMutex* p_mutex)
  48. {
  49.   int result = -1;
  50.   if (p_mutex != NULL) {
  51.     OSSEMVAL semvalue = get_sem(p_mutex);
  52.     if (semvalue > 0) {
  53.       wait_sem(p_mutex);
  54.       result = 0;
  55.     }
  56.   }
  57.   return result;
  58. }