SpLock.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:1k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CSPMutex
  7. class CSPMutex::Scoped
  8. */
  9. #ifndef __SP_LOCK_H__
  10. #define __SP_LOCK_H__
  11. #ifdef SP_WINDOWS
  12. class CSPMutex
  13. {
  14. HANDLE m_hObject;
  15. public:
  16. CSPMutex( )
  17. {
  18. m_hObject = ::CreateMutex( NULL, FALSE, NULL);
  19. }
  20. ~CSPMutex ()
  21. {
  22. if (m_hObject != NULL)
  23. {
  24. ::CloseHandle(m_hObject);
  25. m_hObject = NULL;
  26. }
  27. }
  28. BOOL Lock()
  29. {
  30. if (::WaitForSingleObject(m_hObject, INFINITE) == WAIT_OBJECT_0)
  31. return TRUE;
  32. return FALSE;
  33. }
  34. BOOL UnLock()
  35. {
  36. return ::ReleaseMutex(m_hObject);
  37. }
  38. class Scoped
  39. {
  40. CSPMutex *mx;
  41. public:
  42. Scoped(CSPMutex& m) : mx(&m) { mx->Lock(); }
  43. ~Scoped () { mx->UnLock(); }
  44. };
  45. };
  46. #else
  47. #include <pthread.h>
  48. class CSPMutex
  49. {
  50. pthread_mutex_t mutex;
  51. public:
  52. CSPMutex( )
  53. {
  54. pthread_mutexattr_t attr;
  55. pthread_mutexattr_init(&attr);
  56. pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
  57. pthread_mutex_init(&mutex, &attr);
  58. pthread_mutexattr_destroy(&attr);
  59. }
  60. ~CSPMutex ()
  61. {
  62. while (pthread_mutex_destroy(&mutex) == EBUSY) { Lock(); UnLock(); }
  63. }
  64. BOOL Lock()   { pthread_mutex_lock(&mutex); return true; }
  65. BOOL UnLock() { pthread_mutex_unlock(&mutex); return true; }
  66. class Scoped
  67. {
  68. CSPMutex *mx;
  69. public:
  70. Scoped(CSPMutex& m) : mx(&m) { mx->Lock(); }
  71. ~Scoped () { mx->UnLock(); }
  72. };
  73. };
  74. #endif // SP_WINDOWS
  75. #endif //__SP_LOCK_H__