WAIT_ABANDONED 이 리턴값은 WaitForSingleObject 기타 등등 대기 함수에서
동기화 객체를 소유한 스레드가 terminate되거나 exit 된 경우 발생하게 된다.
크리티컬 섹션 같은 동일 프로세스 내에서만 통용되는 동기화 함수는 이런 기능?을 제공하지 않으므로 소유 스레드가 락 상태가 되면
나머지 기다리는 스레드들은 무한정 대기해버리는 문제가 발생한다.
뮤텍스는 저 기능 하나만으로도 그 동안 매우 유용하게 프로세스 간이나 스레드 간에 잘 사용했다.
그런데 카운트 제한 때문에 세마포어를 사용할 일이 있어서 테스트해보았는데
뮤텍스처럼 불측의 종료시 WAIT_ABANDONED 결과값이 발생하지 않았다.
뮤텍스처럼 이름을 붙이는 것도 가능하고 프로세스 간에도 전역적으로 통용되니 비슷할 거라 생각했는데 아니었다.
세마포어 최대 카운트를 3으로 설정하고 4개의 스레드를 시작하면 세마포어 카운트 제한 때문에 1개는 대기중인 상태가 된다.
이 상태에서 TerminateThread로 현재 작동중인 스레드를 죽여 보았는데,,,, 대기중 스레드는 여전히 대기상태로 존재했다.
그러므로 대기함수를 INFINITE로 설정한 경우 불측의 다운의 경우 무한정 대기하는 사태를 초래할 수 있다.
'API' 카테고리의 다른 글
비정상적인 explorer 다운 상황 후 발생하는 메시지 및 트레이 아이콘 되살리기 (0) | 2012.10.16 |
---|---|
비주얼 스튜디오 리소스 편집기에서 에디트 박스 높이가 줄어들지 않을 때 팁 (0) | 2012.03.22 |
WaitForSingleObject의 첫 인수가 스레드 핸들인 경우 유의점 (0) | 2012.03.17 |
프로세스, 스레드간의 상호 통신에 주의해야 될 점 (0) | 2011.07.21 |
SetCapture 특기할만한 사항 (0) | 2011.07.16 |
SetROP2 이용하여 반전효과 사용시 주의사항 (0) | 2011.07.12 |
mfc 기본 구조 파악 자료 pdf (0) | 2011.07.09 |