讀寫鎖(Read-Write Lock)的一種實現

 項目中用到了此類,實現了多個線程讀、單個線程寫的功能,基於Windows平臺。

思想:兩個相關的鎖,一個用於讀,一個用於寫。可以多個同時讀,但只能一個寫。比傳統的互斥鎖,提高了一定的併發性。

#ifndef READER_WRITER_LOCK_H_ 
#define READER_WRITER_LOCK_H_ 
/************************************************************* 
/* Multi-reader Single-writer class 
/* author: http://vcsky.net 2011/05/18 
**************************************************************/ 
#include "windows.h"

class CReaderWriterLock 

public: 
    CReaderWriterLock() 
    { 
        m_Readers = 0; 
        InitializeCriticalSection(&m_Writer); 
        InitializeCriticalSection(&m_ReaderCount); 
        m_ClearReadersEvent = CreateEvent(NULL,TRUE,TRUE,NULL); 
    }

    ~CReaderWriterLock() 
    { 
        WaitForSingleObject(m_ClearReadersEvent,INFINITE); 
        CloseHandle(m_ClearReadersEvent); 
        DeleteCriticalSection(&m_Writer); 
        DeleteCriticalSection(&m_ReaderCount); 
    }

    /*Read, reset events */ 
    void EnterReader(void) 
    { 
        EnterCriticalSection(&m_Writer); 
        EnterCriticalSection(&m_ReaderCount); 
        if (++m_Readers == 1) 
        { 
            ::ResetEvent(m_ClearReadersEvent); 
        } 
        LeaveCriticalSection(&m_ReaderCount); 
        LeaveCriticalSection(&m_Writer); 
    }

    /*leave read, triggered events */ 
    void LeaveReader(void) 
    { 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章