我創建將在幾個進程和線程數,所以我創建了一個函數來實現鎖定和同步是鎖定和同步使用互斥
HANDLE WaitOnMutex(char* mt)
{
HANDLE ghMutex=NULL;
DWORD lastError=-1;
do
{
ghMutex = CreateMutex(NULL,TRUE,mt);
lastError= GetLastError();
if(lastError!=ERROR_SUCCESS)
{
CloseHandle(ghMutex);
Sleep(2000);
}
}
while(lastError!=ERROR_SUCCESS);
return ghMutex;
}
運行相同功能的程序,我使用它像以下
HANDLE mtx=WaitOnMutex("Global\\DBG_MY_APP");
//Do the work that needs sync
CloseHandle(mtx)
這是鎖定此功能的正確方法嗎?或者我需要使用不同的方法..
注:我使用「全球」,因爲我的應用程序的某些部分是WINSERVICE,我需要會話隔離過程
的代碼是工作在鎖之間測試環境,但我不確定我是否以正確的方式進行
您正在使用錯誤的方式。有關更多信息,請參閱此文檔。 [互斥msdn](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686927%28v=vs.85%29.aspx) – rbelli 2012-03-30 17:23:38
@rbelli可以告訴我什麼是我的方式錯誤? – CnativeFreak 2012-03-30 17:25:11
如果我完全理解你在做什麼,你只是創建或打開互斥鎖。你沒有得到互斥體。爲此,正如我在示例中看到的,您需要調用WaitForSingleObjects函數進行檢查並獲取互斥鎖,然後調用ReleaseMutex函數釋放它。 – rbelli 2012-03-30 17:31:21