mutex.hpp 620 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef _FY_MUTEX_H_
  2. #define _FY_MUTEX_H_
  3. #include <pthread.h>
  4. namespace fy {
  5. class mutex {
  6. public:
  7. mutex() {
  8. pthread_mutex_init(&mutex_, NULL);
  9. }
  10. ~mutex() {
  11. pthread_mutex_destroy(&mutex_);
  12. }
  13. void lock() {
  14. pthread_mutex_lock(&mutex_);
  15. }
  16. void unlock() {
  17. pthread_mutex_unlock(&mutex_);
  18. }
  19. int trylock() {
  20. return pthread_mutex_trylock(&mutex_);
  21. }
  22. private:
  23. pthread_mutex_t mutex_;
  24. };
  25. template <typename T>
  26. class lock_guard {
  27. public:
  28. lock_guard(T& mutex):mutex_(mutex) {mutex_.lock();}
  29. ~lock_guard() {mutex_.unlock();}
  30. private:
  31. T& mutex_;
  32. };
  33. } /* namespace fy */
  34. #endif