C++同步锁管理的一种方法

在C++中,通过提供构造函数、析构函数来对处理资源的获取、释放。

通过C++的这种机制,我们可以很方便地处理C++中的加锁同步机制。把锁对象作为Guard对象的一个成员(m_lock),然后在Guard对象的构造中对m_lock进行加锁:m_lock.acquire(),在Guard对象的析构函数中进行解锁:m_lock.release()。先给出代码实例如下:

template

class Guard

{

public :

        Guard(const T & lock);

        virtual ~Guard();

private:

        const T & m_lock;

};

template

Guard::Guard(const T & lock) :

        m_lock(lock)

{

        m_lock.acquire();

}

template

Guard::~Guard()

{

        m_lock.release();

}

我们可以在应用程序中这样使用它:

 void testFunc(.....)

{

  Guard  guard(mutex);

  ...

}

在刚进入函数testFun(...),创建guard对象,并自动对mutex进行加锁,对特定数据(resource)进行保护。当应用离开testFunc函数模块时,根据guard对象的作用域和生命周期,此时guard对象的析构函数将被调用,因此将自动对mutex进行解锁。在此之后应用的其他线程将可以访问以前被mutex进行保护起来的资源。

 

利用上面的方法,我们可以包对资源的同步访问和访问控制交给C++的编译器,而不需要进行人工干预,从而减轻应用开发人员的工作负担。

你可能感兴趣的:(C/C++)