zoukankan      html  css  js  c++  java
  • 我的C++数据库访问库临界区处理类 荣

    在我的C++数据库访问库中,支持线程安全访问,使用临界区处理类实现该功能。

    一共有两个类:HisCritical、HisCriticalMng。

    HisCritical:主要提供windows临界区的访问,提供构造函数、析构函数、Enter、Leave几个接口。

    HisCritical:临界区访问类,主要封装windows临界区的访问,该类主要在栈中使用,利用局部变量的构造和析构函数出入临界区。

    下面是代码:

    #pragma once

    #if defined(_AFXEXT) || defined(_AFXDLL) || _HIS_USE_MFC
    #else
    #include <Windows.h>
    #endif

    /**
    * @defgroup 临界区域管理
    * @brief 临界区与管理,用于添加互斥锁。
    * @author 徐敏荣
    * @date 2012-06-14
    *
    * @par 修订历史
    * @version v0.5 \n
    * @author 徐敏荣
    * @date 2012-06-14
    * @li 初始版本
    * @{
    */
    namespace His
    {
    /**
    * @brief 临界区访问类,主要封装windows临界区的访问,该类主要在栈中使用,利用局部变量的构造和析构函数出入临界区
    *
    */
    class HisCritical
    {
    public:

    /**
    * @brief 构造函数
    */
    HisCritical()
    {
    ::InitializeCriticalSection(&this->m_cs);
    }

    /**
    * @brief 析构函数
    */
    ~HisCritical()
    {
    ::DeleteCriticalSection(&this->m_cs);
    }

    /**
    * @brief 进入临界区
    */
    void Enter()
    {
    ::EnterCriticalSection(&this->m_cs);
    }

    /**
    * @brief 离开临界区
    */
    void Leave()
    {
    ::LeaveCriticalSection(&this->m_cs);
    }

    private:

    /**
    * @brief 临界区对象
    */
    CRITICAL_SECTION m_cs; /**< 临界区对象 */
    };

    /**
    * @brief 临界区访问管理类,利用构造函数进入临界区,利用西沟函数离开临界区
    * 如果向构造函数提供NULL参数,则不使用临界区。
    *
    */
    class HisCriticalMng
    {
    public:

    /**
    * @brief 构造函数
    * @param[in] cirtical 临界区访问类
    * @note 如果cirtical为空,则不使用临界区
    */
    HisCriticalMng(HisCritical* cirtical)
    {
    this->m_pCritical = cirtical;

    if (this->m_pCritical)
    {
    this->m_pCritical = cirtical;
    this->m_pCritical->Enter();
    }
    }

    /**
    * @brief 虚构函数
    */
    ~HisCriticalMng()
    {
    if (this->m_pCritical)
    {
    this->m_pCritical->Leave();
    }
    }

    private:
    HisCritical* m_pCritical;
    };
    }

    /**//** @}*/ // 临界区域管理

  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/admin11/p/2552366.html
Copyright © 2011-2022 走看看