//m_pSection是类的成员 CCriticalSection m_pSection;void  CMyClass::Func()
{
   CSingleLock pLock( &m_pSection, TRUE ); 
   ...操作资源
}
我看到不少程序就是这样,可以么?我看MSDN上说需要显式调用lock
也就是
void  CMyClass::Func()
{
   CSingleLock pLock( &m_pSection, TRUE ); 
   pLock.Lock();
   ...操作资源
   pLock.Unlock();}第一种正常么?

解决方案 »

  1.   

    第二种方式用的比较多!如果不使用CSingleLock的话,你可以使用CRITICAL_SECTION(临界区),Mutex(互斥体)来进行资源同步!CRITICAL_SECTION g_lock;InitializeCriticalSection(&g_lock);EnterCriticalSection(&g_lock);
    //访问共享资源
    LeaveCriticalSection(&g_lock);DeleteCriticalSection(&g_lock);
    +
      

  2.   

    一般用临界区,简单一点
    如果是用VC的话,直接用封装好的CCriticalSection类
    CCriticalSection g_CriticalSection;
    ....
    g_CriticalSection.Lock();
    //访问共享资源
    g_CriticalSection.Unlock();如果是CB的话:
    TCriticalSection * pCriticalSection = new TCriticalSection;
    pCriticalSection->Enter();
    //访问共享资源
    pCriticalSection->Leave();
    delete pCriticalSection;
      

  3.   

    enter写到构造函数。
    leave写到析构函数。
    就不要成对出现了。