我正試圖在多線程程序上實現相互交換。我不知道我是否做得對,而且很難測試。我是否正確實施了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