| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include <Windows.h>
- 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_;
- };
- }
|