Mutex.h.svn-base
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*
  2.  *  OpenKore C++ Standard Library
  3.  *  Copyright (C) 2006  VCL
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Lesser General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Lesser General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Lesser General Public
  16.  *  License along with this library; if not, write to the Free Software
  17.  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18.  *  MA  02110-1301  USA
  19.  */
  20. #ifndef _OSL_MUTEX_H_
  21. #define _OSL_MUTEX_H_
  22. #ifdef WIN32
  23. #define WIN32_MEAN_AND_LEAN
  24. #include <windows.h>
  25. #else
  26. #include <pthread.h>
  27. #endif
  28. namespace OSL {
  29. /**
  30.  * A mutex object (Mutual Exclusion, also known as critical section on Windows).
  31.  * This is a lock which can be used to ensure that no two
  32.  * threads can access the same resource simultaneously.
  33.  *
  34.  * @class Mutex OSL/Threading/Mutex.h
  35.  * @ingroup Threading
  36.  * @see Atomic, Thread
  37.  */
  38. class Mutex {
  39. private:
  40. #ifdef WIN32
  41. CRITICAL_SECTION cs;
  42. #else
  43. pthread_mutex_t mutex;
  44. #endif
  45. public:
  46. /**
  47.  * Create a new Mutex object. This mutex is not locked.
  48.  */
  49. Mutex() throw();
  50. ~Mutex() throw();
  51. /**
  52.  * Lock this mutex. Do not lock a mutex twice from
  53.  * the same thread, or it'll cause a deadlock.
  54.  */
  55. void lock() throw();
  56. /**
  57.  * Try to lock this mutex.
  58.  *
  59.  * @return Whether this mutex was successfully locked.
  60.  *         If the mutex is already locked, then false is returned.
  61.  */
  62. bool tryLock() throw();
  63. /**
  64.  * Unlock this mutex.
  65.  */
  66. void unlock() throw();
  67. };
  68. }
  69. #endif /* _OSL_MUTEX_H_ */