123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #ifndef RVC_VENDOR_MUTEX_H_
- #define RVC_VENDOR_MUTEX_H_
- #pragma once
- #ifdef _WIN32
- #include <Windows.h>
- #else
- #include <pthread.h>
- #endif //_WIN32
- namespace cmb {
- class noncopyable
- {
- protected:
- noncopyable(){}
- ~noncopyable(){}
- private:
- noncopyable(const noncopyable&);
- const noncopyable& operator=(const noncopyable&);
- };
- class mutex : private noncopyable
- {
- friend class condition;
- public:
- mutex();
- ~mutex();
- void lock();
- void unlock();
- private:
- #if defined(_MSC_VER)
- CRITICAL_SECTION csection_;
- #elif defined(__GNUC__)
- pthread_mutex_t mutx_;
- #endif
- };
- class unique_lock : private noncopyable
- {
- public:
- unique_lock(mutex& m) : mutex_(m)
- {
- mutex_.lock();
- owns_ = true;
- }
- ~unique_lock()
- {
- if (owns_)
- {
- mutex_.unlock();
- }
- }
- void lock()
- {
- owns_ = true;
- mutex_.lock();
- }
- void unlock()
- {
- owns_ = false;
- mutex_.unlock();
- }
- private:
- mutex& mutex_;
- bool owns_;
- };
- }
- #endif // RVC_VENDOR_MUTEX_H_
|