【发布时间】:2012-03-30 17:18:12
【问题描述】:
我正在创建一个程序,它将在多个进程和多个线程中运行相同的函数,所以我创建了一个函数来实现锁定和同步
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,我需要在会话隔离进程之间锁定
代码在测试环境中运行,但我不确定我的做法是否正确
【问题讨论】:
-
你用错了方法。有关详细信息,请参阅此文档。 mutex msdn
-
@rbelli 可以请告诉我我的方式到底出了什么问题?
-
如果我完全理解你在做什么,你只是在创建或打开互斥锁。你没有得到互斥锁。为此,正如我在示例中看到的,您需要调用函数 WaitForSingleObjects 来检查并获取互斥锁,然后调用函数 ReleaseMutex 来释放它。
标签: c multithreading winapi mutex