Mutex 互斥体 线程同步 单开单实例
1. 线程同步
HANDLE hMutex = NULL; // 互斥体 登陆同步
hMutex = OpenMutex(NULL, NULL, "xxx同步");
if(!hMutex)
{
hMutex = CreateMutex(NULL, NULL, "xxx同步");
}
dwMutexRet = WaitForSingleObject(hMutex, -1);
// 同步代码 ...
ReleaseMutex(hMutex); // 放行一个
要点:如果该线程执行了一次 WaitForSingleObject 而未执行 ReleaseMutex 就返回 ,或继续循环执行第二次 WaitForSingleObject,
会出现线程死锁现象,导致其它的等待线程一直等待(在WaitForSingleObject处),没有机会往下执行。
2. 单实例 单开
HANDLE g_hMutexSingleton = CreateMutex(NULL, FALSE, _T("仙灵单例"));
if(GetLastError() == ERROR_ALREADY_EXISTS) // 检测程序是否已运行
{
AfxMessageBox(_T("本程序正在运行"));
exit(0); // 退出程序
}
要点: 程序退出时记得执行 CloseHandle(g_hMutexSingleton); // 关闭句柄 单例 互斥体
浙公网安备 33010602011771号