线程同步之二:互斥量

    技术2024-11-19  11

    互斥量(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();

    最新回复(0)