zoukankan      html  css  js  c++  java
  • 封装个简单的自动锁

    #pragma once

    //锁接口
    class ILock 

    public
        virtual ~ILock() {} 
        virtual void Lock() = 0
        virtual void Unlock() = 0
    }; 

    /************************************************************************/
    /*        CRITICAL_SECTION                                              */
    /************************************************************************/
    class CriticalSectionLocker 
        : ILock
    {  
    public
        inline CriticalSectionLocker(void)
        {
            InitializeCriticalSection(&m_hCriticalSection); 
        }

        inline virtual ~CriticalSectionLocker(void)
        {
            DeleteCriticalSection(&m_hCriticalSection); 
        }

        inline virtual void Lock()
        {
            EnterCriticalSection(&m_hCriticalSection);
        }

        inline virtual void Unlock()
        {
            LeaveCriticalSection(&m_hCriticalSection); 
        }
    private:
        CRITICAL_SECTION m_hCriticalSection;
    }; 

    /************************************************************************/
    /* Mutex                                                                */
    /************************************************************************/

    //互斥对象锁类 

    class MutexLocker
        : public ILock 

    public
        MutexLocker()
        {
            m_mutex = ::CreateMutex(NULL, FALSE, NULL); 
        }

        ~MutexLocker()
        {
            ::CloseHandle(m_mutex);
        }

        inline virtual void Lock()
        {
            DWORD d = WaitForSingleObject(m_mutex, INFINITE);
        }

        inline virtual void Unlock()
        {
            ::ReleaseMutex(m_mutex);
        }

    private
        HANDLE m_mutex; 
    }; 

    /************************************************************************/
    /* 自动锁                                                                     */
    /************************************************************************/
    template <typename LockTyp>
    class AutoLock 

        LockTyp* m_pLock; 
    public
        AutoLock(LockTyp& locker) 
        { 
            m_pLock = &locker; 
            m_pLock->Lock(); 
        } 

        AutoLock(LockTyp* locker) 
        { 
            m_pLock = locker; 
            m_pLock->Lock(); 
        } 

        ~AutoLock(void
        { 
            m_pLock->Unlock(); 
        } 
    }; 
  • 相关阅读:
    python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法
    head first 设计模式第一章笔记
    pycharm设置python脚本模板
    zip的压缩和解压命令
    js数组和集合互转
    查看Oracle的连接数
    转 小辉_Ray DOM性能小记
    学习总结之javaScript document对象详解
    MySQL 表的一些操作
    MySQL 的一些操作
  • 原文地址:https://www.cnblogs.com/kenter/p/2295742.html
Copyright © 2011-2022 走看看