-2

閉じられたミューテックスを待つとどうなりますか?

DWORD WINAPI Fun2Proc(LPVOID lpParameter   // thread data)  
{
    while(TRUE)  
    {  
       WaitForSingleObject(hMutex,INFINITE);   //what would happen here?

       Sleep(1000);  

       ReleaseMutex(hMutex);  
    }  

    return 0;  
} 
HANDLE hMutex;
int main(){
HANDLE hThread2;  
hMutex=CreateMutex(NULL, FALSE,"tickets");
CloseHandle(hMutex);    //  and closed here
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);  
CloseHandle(hThread2);  
......
}
4

2 に答える 2

1

「CloseHandle」の後、「hMutex」の値は無効になるため、WaitForSingleObject() は WAIT_FAILED を返し、GetLastError() はハンドルが無効であることを示すエラー コードを返す必要があります。

ただし、その間に Windows が別のオブジェクトにハンドルを割り当てた可能性があります。おそらく、まだ「hMutex」に格納されている値は、CreateThread() によって内部的に作成されたオブジェクトを識別します。この場合、WaitForSingleObject() はそのオブジェクトを待ちます。

その間、ハンドルが別のオブジェクトに再割り当てされる可能性があるため、「閉じられたハンドル」を待機できるようにコードを記述することはお勧めできません。

于 2013-10-19T12:46:29.747 に答える