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(); 
        } 
    }; 
  • 相关阅读:
    自制DEV皮肤
    网格系统,菜单、按钮及导航
    表单
    排版
    Bootstrap的HTML标准模板
    ecshop常用的修改内容
    删除ECSHOP后台左侧导航菜单
    dede 内容页文章标题显示不全的更改方法
    dede 鼠标移到标题处显示完整标题
    Artlist标签去掉table
  • 原文地址:https://www.cnblogs.com/kenter/p/2295742.html
Copyright © 2011-2022 走看看