互斥量(Mutex):HANDLE m_Mutex=CreateMutex(NULL,FALSE,NULL); //创建互斥量,初始化创建者线程不拥有该互斥对象(即无信号状态)
WaitForSingleObject(pDlg->m_Mutex,INFINITE); //等待互斥量为有信号状态(即等待调用者线程拥有该对象),若无信号,则调用线程将被无限期挂起.
ReleaseMutex(pDlg->m_Mutex); //调用者线程不再拥有该互斥量.(即将该互斥量置为有信号状态)
CloseHandle(m_Mutex); //释放资源
m_Mutex=NULL;
MFC中封装了互斥量对象为CMutex类,安全起见,要配合CSingleLock或者CMultiLock类使用,而不要单独使用.CMutex m_Mutex(FALSE,NULL,NULL);
CSingleLock m_SingleLock(&m_Mutex);
m_SingleLock.Lock();
if (m_SingleLock.IsLocked())
{
//Do Something;
//如果遇到异常,线程会挂掉,由于CSingleLock是局部变量,线程结束后生命周期结束,会调用CSingleLock的析构函数,不会造成死锁
}
m_SingleLock.UnLock();