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

custom RAII C++ implementation for scoped mutex locks

本文关键字:RAII c++ 实现 自定义 范围      更新时间:2023-10-16

我不能使用boost或最新的std::线程库。方法是创建一个作用域互斥锁的自定义实现。

简单地说,当一个类实例被创建一个互斥锁。在类销毁时,互斥锁被解锁。

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

我需要使用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泛型,你可以防止子类化。由于引用字段

,已经禁止复制/赋值。

EDIT For 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;
};