c++ 惯用法:定界加锁

来源:互联网 发布:网络招生 熊龙 编辑:程序博客网 时间:2024/04/28 04:10

定界加锁能确保控制进入到某一范围时,自动获取锁,而当控制离开该范围时,自动释放锁。
代码示例:

class Mutex{public:    Mutex()    {        pthread_mutex_init(&_lock, NULL);    }    virtual ~Mutex()    {        pthread_mutex_destroy(&_lock);    }    void Lock()    {        pthread_mutex_lock(&_lock);    }    void Unlock()    {        pthread_mutex_unlock(&_lock);    }private:    pthread_mutex_t _lock;};class ScopedLock{public:    ScopedLock( Mutex& mutex_obj ) : _mutex_obj(mutex_obj)    {        _mutex_obj.Lock();    }    ~ScopedLock()    {        _mutex_obj.Unlock();    }private:    Mutex& _mutex_obj;};template < class _Type >class Singleton{public:    static void CreateInstance()    {        if ( NULL == _instance() )        {            ScopedLock lock( _mutex() );            if (NULL == _instance())            {                _instance() = new _Type();            }        }    }    static _Type* GetInstance()    {        return _instance();    }    static void DestroyInstance()    {        ScopedLock lock( _mutex() );        if ( _instance())        {            delete _instance();            _instance() = NULL;        }    }protected:    static Mutex & _mutex()    {        static Mutex m;        return m;    }    static _Type* & _instance()    {        static _Type* p = NULL;        return p;    }};

优点:
1.增加了健壮性。
缺点:
1.递归使用可能发生死锁。
2.受与语言相关的语义的限制。

0 0