Mutex.h 940 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Mutex.h
  3. *
  4. * Created on: Aug 30, 2017
  5. * Author: guoxs
  6. */
  7. #ifndef _SYSTEM_MUTEX_H_
  8. #define _SYSTEM_MUTEX_H_
  9. #include <pthread.h>
  10. /**
  11. * @brief 锁
  12. */
  13. class Mutex {
  14. public:
  15. enum {
  16. E_TYPE_PRIVATE = 0,
  17. E_TYPE_SHARED = 1
  18. };
  19. Mutex();
  20. Mutex(int type);
  21. ~Mutex();
  22. /**
  23. * @brief 加锁
  24. */
  25. void lock();
  26. /**
  27. * @brief 解锁
  28. */
  29. void unlock();
  30. void tryLock();
  31. /**
  32. * @brief 自动锁
  33. */
  34. class Autolock {
  35. public:
  36. /**
  37. * @brief 构造时加锁
  38. */
  39. inline Autolock(Mutex &mutex) : mLock(mutex) {
  40. mLock.lock();
  41. }
  42. /**
  43. * @brief 构造时加锁
  44. */
  45. inline Autolock(Mutex *mutex) : mLock(*mutex) {
  46. mLock.lock();
  47. }
  48. /**
  49. * @brief 析构时解锁
  50. */
  51. inline ~Autolock() {
  52. mLock.unlock();
  53. }
  54. private:
  55. Mutex &mLock;
  56. };
  57. private:
  58. friend class Condition;
  59. Mutex(const Mutex&);
  60. Mutex& operator=(const Mutex&);
  61. pthread_mutex_t mMutex;
  62. };
  63. #endif /* _SYSTEM_MUTEX_H_ */