Listing 8: A thread policy for multithreaded usage

under Win32

class PFWin32MultiThreaded
{
  class Lock 
  {
  public:
    Lock(PFWin32MultiThreaded* pOuter) : m_pOuter(pOuter)
    { EnterCriticalSection(&m_pOuter->m_critSec); }

    ~Lock()
    { LeaveCriticalSection(&m_pOuter->m_critSec); }

  private:
    PFWin32MultiThreaded* m_pOuter;
  };

  friend class Lock;

protected:
  PFWin32MultiThreaded()
  { InitializeCriticalSection(&m_critSec); }
  
  virtual ~PFWin32MultiThreaded()
  { DeleteCriticalSection(&m_critSec); }
  
  private:
    CRITICAL_SECTION m_critSec;
};
— End of Listing —