스레드가 뮤텍스를 끝내기 전에 뮤텍스에서 CloseHandle을 호출하여 ReleaseMutex를 아직 호출하지 않은 경우 예상되는 동작은 무엇입니까?Mutex에서 CloseHandle, ReleaseMutex 전에 - 어떻게됩니까?
답변
가장 심각한 결과는 뮤텍스가 차단 해제되기를 기다리는 스레드입니다. WaitXxx 호출은 WAIT_ABANDONED를 반환합니다. 어느 시점에서 TerminateProcess를 호출하는 것은 정말 좋은 생각입니다. 왜냐하면 방금 무슨 일이 일어 났는지 전혀 알지 못하기 때문입니다.
'WAIT_ABANDONED'는 뮤텍스 잠금을 소유하고있는 동안 스레드가 종료 될 경우에만보고됩니다. 이것은 뮤텍스 핸들에서 조기에 호출 된 CloseHandle()과는 다릅니다. –
@Remy - 당신이 ReleaseMutex() 호출에 대해 얻은 GetLastError() 값을 혼란에 빠뜨리고 있다고 생각합니다. 저는 WaitForSingleObject()와 친구들에 대해서 이야기하고 있습니다. –
CloseHandle을 호출하기 전에 스레드가 완료되었는지 확인하기 위해 WaitForSingleObject가 좋지 않다고 생각하십니까? –
CloseHandle()
은 전달 된 핸들을 즉시 파괴합니다. 닫힌 뮤텍스 핸들과 함께 호출하면 ReleaseMutex()
은 ERROR_INVALID_HANDLE
오류 코드와 함께 실패합니다.
뮤텍스의 이름이 지정되면 뮤텍스를 뒷받침하는 하나의 참조 카운트 된 커널 개체가 있지만 CreateMutex()
및 OpenMutex()
은 개별적으로 닫아야하는 고유 한 HANDLE
값을 반환합니다. 동일한 명명 된 뮤텍스에 대한 여러 핸들이 만들어 지거나 열리는 경우 한 핸들에서 CloseHandle()
을 호출해도 다른 핸들이 같은 뮤텍스에 적용되지 않습니다.
이 경우 CloseHandle()은 핸들을 파괴하지만 모든 핸들이 닫힌 경우에만 뮤텍스 개체가 메모리에서 제거됩니다. 그래서 CloseHandle (핸들)에 의해 핸들을 파괴 할 것이므로 ReleaseMutex (핸들)는 작동하지 않습니다. 그러나 뮤텍스는 계속해서 그 스레드가 소유 할 수 없기 때문에 뮤텍스 잠금을 기다리는 다른 스레드에 영향을 미칩니다.
- 1. SqlDataReader 전에 SqlConnection을 닫으면 어떻게됩니까?
- 2. python : 닫히기 전에 파일을 열면 어떻게됩니까?
- 3. CloseHandle()에서의 winapi 호출에 대한 인수.
- 4. Paypal PDN - 고객이 리디렉션 전에 창을 닫으면 어떻게됩니까?
- 5. 첫 번째 인터럽트 작업이 완료되기 전에 다른 인터럽트가 발생하면 어떻게됩니까?
- 6. 지우기 지우기 관용구 : 지우기 전에 지우개를 제거하면 어떻게됩니까?
- 7. Magento 1.4의 한 페이지 결제에서 주문을 저장하기 전에 이벤트는 어떻게됩니까?
- 8. 텍스처 매핑 작업을 수행하기 전에 GL 색상을 설정하면 어떻게됩니까?
- 9. CloseHandle 혼란 - 핸들의 여러 "복사본"에서 CloseHandle을 호출해야합니까?
- 10. EC2 인스턴스를 재부팅하면 어떻게됩니까?
- 11. 스레드 안전성은 어떻게됩니까?
- 12. StringBuilder의 RAM 소비량은 어떻게됩니까?
- 13. 아이폰 개발 프로그램 : 어떻게됩니까?
- 14. iOS 베타 일정은 어떻게됩니까?
- 15. 창이 클릭되었습니다 - 그러면 어떻게됩니까?
- 16. 프로세스가 종료되면 정확히 어떻게됩니까?
- 17. CVSNT는 어떻게됩니까?
- 18. 내 mod_rewrite는 어떻게됩니까?
- 19. PHP의 역방향 출력은 어떻게됩니까?
- 20. 여러 스레드가 ReentrantReadWriteLock에 액세스하려고하면 어떻게됩니까?
- 21. Main() 앞에 오는 것은 어떻게됩니까?
- 22. Android StrictMode의 수명주기는 어떻게됩니까?
- 23. MySQL 데이터베이스가 닫히지 않으면 어떻게됩니까?
- 24. 전에
- 25. DllImport를 여러 번 호출하면 어떻게됩니까?
- 26. fullcalendar에 추가하면 어떻게됩니까?
- 27. YSlow - CDN을 클릭하면 어떻게됩니까?
- 28. php : 조건이 맞으면 어떻게됩니까?
- 29. CLR GC주기에서는 어떻게됩니까?
- 30. IIS7에서 Application_BeginRequest와 Application_PreRequestHandlerExecute는 어떻게됩니까?
그런 일을하는 이유는 무엇입니까? –
@San Jacinto : MTA COM 개체에는 작업을 수행하고 CoFreeUnusedLibraries (0, 0)를 호출하는 호출자가 지연을 0으로 수행하는 스레드가 있습니다.이 호출자는 DllCanUnloadNow를 호출하여 S_OK를 반환하지만 뮤텍스는 ' t 출시되었습니다. MTA에 대한 지연은 기본적으로 스레드가 완료 될 수 있도록 10 분이지만,이 경우 NULL이 될 수 있도록 뮤텍스를 확인해야하며, 그렇지 않으면 DllCanUnloadNow에서 S_FALSE를 반환해야합니다. 그러면 메모리 액세스 위반이 발생합니다. 이제 mutex가 == NULL이 될 때까지 기다리는 문제는 Explicit가 CloseHandle을 호출 한 적이 없다는 것입니다. –
와우, 멋진 설명. 추후 사용자를 위해이 정보를 포함하도록 질문을 편집 하시겠습니까? –