zoukankan      html  css  js  c++  java
  • Windows编程-- 对Critical Section的封装

    // 方法一: Lock中的CritSect成员变量必须是引用类型。

    class CritSect
    {
    public:
    friend
    class Lock;
    CritSect() { InitializeCriticalSection(
    &_critSection); }
    ~CritSect() { DeleteCriticalSection(&_critSection); }
    private:
    void Acquire(){EnterCriticalSection(&_critSection);}
    void Release(){LeaveCriticalSection(&_critSection);}

    CRITICAL_SECTION _critSection;
    };

    class Lock
    {
    public:
    Lock(CritSect
    & critSect):_critSect(critSect) { _critSect.Acquire();}
    ~Lock(){_critSect.Release();}
    private:
    CritSect
    & _critSect;
    };

    //
    // 方法2 比较简单 很好理解
    class CLock {
    public:
    CLock() { InitializeCriticalSection (
    &m_criticalSection); }
    void Lock () { EnterCriticalSection (&m_criticalSection);}
    void Unlock () { LeaveCriticalSection (&m_criticalSection);}
    virtual ~CLock() { DeleteCriticalSection (&m_criticalSection);}
    private:
    CRITICAL_SECTION m_criticalSection;
    };


    //
    class CScopedLocker {
    public:
    CScopedLocker (CLock
    * t) : m_lock(t){ m_lock->Lock(); }
    ~CScopedLocker() { m_lock->Unlock(); }
    private:
    CLock
    * m_lock;
    };

    说明 :

    1 用法:用类定义一个对象, 然后调用函数。 如下:
    CritSect sect;
    Lock lock(sect);

    CLock t;
    CSCopedLocker st(&t);

    2 但是,感觉这两种方法用的时候不是最安全的。具体的可以看一下《Effective C++》里面的条款13: 以对象管理资源。里面讲更好些。

    FangSH  15:44 2011-1-5

  • 相关阅读:
    前端笔记-jquery
    git的使用
    前端笔记-bom
    微信小程序没找到构建npm或者没找到node_modules目录
    微信小程序判断 wx:if wx:else
    微信小程序提示云函数部署不成功
    cmd如何进入文件夹
    微信小程序view居中
    vue页面跳转兄弟组件传值
    vue全局变量apiurl
  • 原文地址:https://www.cnblogs.com/fangshenghui/p/1926429.html
Copyright © 2011-2022 走看看