chxavmutex.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:2k
源码类别:

Symbian

开发平台:

C/C++

  1. /*****************************************************************************
  2.  * chxavmutex.h
  3.  * ------------
  4.  *
  5.  * Synopsis:
  6.  * This class is a C++ wrapper for the pthreads mutex primitive.
  7.  *
  8.  * Target:
  9.  * Symbian OS
  10.  *
  11.  *
  12.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  13.  *
  14.  *****************************************************************************/
  15. #ifndef _chxavmutex_h_
  16. #define _chxavmutex_h_
  17. // Symbian includes...
  18. #include <e32base.h>
  19. #include <e32cons.h>
  20. #include <e32std.h>
  21. #include "bsthread/thread_error.h"
  22. //
  23. // bsMutex class
  24. //
  25. class CHXAvMutex {
  26.  public:
  27.     friend class bsConditionVar;
  28.     CHXAvMutex ();
  29.     ~CHXAvMutex ();
  30.     void Lock ();
  31.    
  32.     void Unlock ();
  33.     bool TryLock ();
  34.  private:
  35.     CHXAvMutex (const CHXAvMutex& m); // disallow copies
  36.     void operator= (const CHXAvMutex& m); // disallow copies
  37.     RMutex m_cs;
  38. };
  39. //
  40. // bsMutex methods
  41. //
  42. inline 
  43. bsMutex::bsMutex ()
  44. {
  45.     // create a process-relative, local mutex
  46.     TInt ret = m_cs.CreateLocal(); 
  47.     if (ret != KErrNone)
  48. bsThreadError (ret);
  49. }
  50. inline
  51. bsMutex::~bsMutex ()
  52. {
  53.     m_cs.Close();
  54. }
  55. inline
  56. void bsMutex::Lock ()
  57. {
  58.     m_cs.Wait();
  59. }
  60. inline
  61. void bsMutex::Unlock ()
  62. {
  63.     m_cs.Signal();
  64. }
  65. inline
  66. bool bsMutex::TryLock ()
  67. {
  68.     //
  69.     // XXXCBR -- this isn't right - we might get locked by another
  70.     // thread after we check Count() but before we can Wait().
  71.     //
  72.     if (m_cs.Count() < 1)
  73. return false;
  74.     else
  75. m_cs.Wait();
  76.     return true;
  77. }
  78. #endif // _MUTEX_H_