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);    // 关闭句柄 单例 互斥体

 

posted on 2015-08-17 20:31  伊扎洛  阅读(171)  评论(0)    收藏  举报

导航