#ifndef RVC_VENDOR_MUTEX_H_ #define RVC_VENDOR_MUTEX_H_ #pragma once #ifdef _WIN32 #include #else #include #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_