windows下的锁

来源:互联网 发布:上海数据交易中心 面试 编辑:程序博客网 时间:2024/06/05 00:41
#pragma once   #include <Windows.h>class CLock{    CRITICAL_SECTION m_cs;public:    CLock (){::InitializeCriticalSection(&m_cs);}    ~CLock(){::DeleteCriticalSection(&m_cs);}    void Lock(){::EnterCriticalSection(&m_cs);}    void Unlock(){::LeaveCriticalSection(&m_cs);}}; class readwrite_lock{public:readwrite_lock(): read_cnt(0){}void readLock(){_read.Lock();if (++read_cnt == 1)_write.Lock();_read.Unlock();}void readUnlock(){_read.Lock();if (--read_cnt == 0)_write.Unlock();_read.Unlock();}void writeLock(){_write.Lock();}void writeUnlock(){_write.Unlock();}private:CLock _read;CLock _write;int read_cnt; // 已加读锁个数};class CAutoLock{CLock* m_pLock;public:CAutoLock(CLock* pLock):m_pLock(pLock){m_pLock->Lock();}~CAutoLock(){m_pLock->Unlock();}};class CAutoReadLock{readwrite_lock* m_pLock;public:CAutoReadLock(readwrite_lock* pLock):m_pLock(pLock){m_pLock->readLock();}~CAutoReadLock(){m_pLock->readUnlock();}};class CAutoWriteLock{readwrite_lock* m_pLock;public:CAutoWriteLock(readwrite_lock* pLock):m_pLock(pLock){m_pLock->writeLock();}~CAutoWriteLock(){m_pLock->writeUnlock();}};

0 0
原创粉丝点击