我正试图在多线程程序上实现相互交换。我不知道我是否做得对,而且很难测试。我是否正确实施了Mutal Exchange?
在main.cpp中,我有这样的事情:
//mutex handle
HANDLE hIOMutex = CreateMutex (NULL,FALSE,NULL);
//main
while (1) {
Sleep(STEP);
WaitForSingleObject(hIOMutex,INFINITE);
//DO STUFF
ReleaseMutex(hIOMutex);
}
return 0;
而且在功能使用的其他线程:
void Case::account_login(Connection* Con) {
//mutex handle
HANDLE hIOMutex = CreateMutex (NULL,FALSE,NULL);
WaitForSingleObject(hIOMutex,INFINITE);
//DO STUFF
ReleaseMutex(hIOMutex);
return;
}
这是正确的吗?部分代码甚至使用相同的HANDLE,还是我在本地声明它们,从而搞砸了功能?
如果我错过了任何重要信息,请告诉我。
谢谢。
你能否提供了如何使手柄全球的代码?当我试图声明它是'extern'时,它会抛出错误。 – Matthew
@Matthew:你应该真的考虑其他的选择。我把“使句柄成为一个全局变量是有原因的:这是最糟糕的解决方案(从软件工程的角度来看)”,提供了一个示例。 –
谢谢。似乎有效!我会记住将互斥量作为参数传递给未来,因为我改进了代码。 – Matthew