대기 체인 순회
WCT(대기 체인 순회)를 사용하면 디버거가 애플리케이션 중단 및 교착 상태를 진단할 수 있습니다.
대기 체인은 각 스레드가 뒤에 오는 개체를 기다리는 스레드 및 동기화 개체의 교대 시퀀스입니다. 다음에 오는 각 개체는 차례로 체인의 후속 스레드가 소유합니다.
스레드는 스레드가 개체를 요청할 때부터 개체를 획득할 때까지 동기화 개체를 기다립니다. 이 잠금 은 스레드가 잠금을 획득할 때부터 스레드가 해제할 때까지 스레드가 소유합니다. 즉, 스레드 1이 스레드 2가 소유한 잠금을 기다리는 경우 스레드 1은 스레드 2를 기다리고 있습니다.
WCT는 다음 동기화 기본 형식을 지원합니다.
- 고급 로컬 프로시저 호출(ALPC)
- COM(Microsoft Component Object Model)
- 중요 섹션 개체
- 뮤텍스 개체
- SendMessage 함수
- 프로세스 및 스레드에 대한 대기 작업
하나 이상의 스레드에 대한 대기 체인을 검색하려면 OpenThreadWaitChainSession 및 GetThreadWaitChain 함수를 사용하여 WCT 세션을 만듭니다. WCT 세션은 HWCT 형식의 핸들로 표시됩니다.
세션은 동기식 또는 비동기식일 수 있습니다.
대기 체인이 검색될 때까지 동기 세션을 취소하고 호출 스레드를 차단할 수 없습니다.
비동기 세션은 호출 스레드를 차단하지 않으며 CloseThreadWaitChainSession 함수를 사용하여 애플리케이션에서 취소할 수 있습니다. 비동기 작업의 결과는 애플리케이션에서 제공하는 WaitChainCallback 콜백 함수를 통해 사용할 수 있습니다.
비동기 세션의 경우 호출자는 GetThreadWaitChain을 통해 컨텍스트 데이터 구조에 대한 포인터를 지정할 수 있습니다. 이 동일한 포인터는 WaitChainCallback 콜백 함수에 전달됩니다.
컨텍스트 데이터 구조는 사용자 정의이며 WCT에 불투명합니다. 컨텍스트 데이터 구조는 애플리케이션에서 WCT 쿼리와 콜백 함수 간에 컨텍스트를 전달하는 데 사용할 수 있습니다. 일반적으로 이 구조체를 통해 이벤트 핸들을 전달하고 콜백이 실행될 때 이 이벤트가 신호를 받고 모니터링 스레드에 쿼리가 완료되었음을 알립니다.
대기 체인 통과의 예는 WCT 사용을 참조하세요.