自定义RAII C ++实现范围互斥锁

我不能使用boost或最新的std ::线程库。 要走的路是创build一个有限范围的互斥体的自定义实现。

简单地说,当一个类实例是创build一个互斥锁的时候。 在课程破坏时,互斥锁被解锁。

任何可用的实现? 我不想重新发明轮子。

我需要使用pthreads

  • 资源获取是初始化==“RAII”

注意这是一个旧的答案。 C ++ 11包含更好的与平台无关的助手:

  • 的std :: lock_guard
  • std :: mutex , std :: timed_mutex , std :: recursive_mutex , std :: recursive_timed_mutex

和其他选项,如std :: unique_lock,boost :: unique_lock

任何RAII教程都可以。

这是要点:(也在http://ideone.com/kkB86

// stub mutex_t: implement this for your operating system struct mutex_t { void Acquire() {} void Release() {} }; struct LockGuard { LockGuard(mutex_t& mutex) : _ref(mutex) { _ref.Acquire(); // TODO operating system specific }; ~LockGuard() { _ref.Release(); // TODO operating system specific } private: LockGuard(const LockGuard&); // or use c++0x ` = delete` mutex_t& _ref; }; int main() { mutex_t mtx; { LockGuard lock(mtx); // LockGuard copy(lock); // ERROR: constructor private // lock = LockGuard(mtx);// ERROR: no default assignment operator } } 

当然,你可以使它通用于mutex_t ,你可以防止子类化。 由于引用字段,复制/分配已被禁止

编辑 pthreads:

 struct mutex_t { public: mutex_t(pthread_mutex_t &lock) : m_mutex(lock) {} void Acquire() { pthread_mutex_lock(&m_mutex); } void Release() { pthread_mutex_unlock(&m_mutex); } private: pthread_mutex_t& m_mutex; };