Navigate: Main, Up, Bottom


Critical Sections

The standard way of realizing mutual exclusion between threads under Windows NT is using critical sections. The four basic system calls for critical sections are

You can implement a simple wrapper class for critical sections in the following manner:

class CCriticalSection {
private:
#ifdef _MT
    CRITICAL_SECTION m_critical_section;
#endif

public:
    CCriticalSection (void) {
#ifdef _MT
        ::InitializeCriticalSection (&m_critical_section);
#endif
    }
    ~CCriticalSection (void) {
#ifdef _MT
        ::DeleteCriticalSection (&m_critical_section);
#endif
    }

    void Enter (void) {
#ifdef _MT
        ::EnterCriticalSection (&m_critical_section);
#endif
    }
    void Leave (void) {
#ifdef _MT
        ::LeaveCriticalSection (&m_critical_section);
#endif
    }
};

If you want to use critical sections exception safe, you should try something like the following guard helper class:

class CCriticalSectionGuard {
private:
    CCriticalSection &m_critical_section;

public:
    CCriticalSectionGuard (CCriticalSection &critical_section):
        m_critical_section (critical_section) {
        m_critical_section.Enter ();
    }
    ~CCriticalSectionGuard (void) {
        m_critical_section.Leave ();
    }
};

Navigate: Main, Up, Top

© 2000-2002 GeNeSys mbH & Co. KG
Last revised: 12/14/2000