다음을 통해 공유


대기 체인 순회

WCT(대기 체인 순회)를 사용하면 디버거가 애플리케이션 중단 및 교착 상태를 진단할 수 있습니다.

대기 체인은 각 스레드가 뒤에 오는 개체를 기다리는 스레드 및 동기화 개체의 교대 시퀀스입니다. 다음에 오는 각 개체는 차례로 체인의 후속 스레드가 소유합니다.

스레드는 스레드가 개체를 요청할 때부터 개체를 획득할 때까지 동기화 개체를 기다립니다. 이 잠금 은 스레드가 잠금을 획득할 때부터 스레드가 해제할 때까지 스레드가 소유합니다. 즉, 스레드 1이 스레드 2가 소유한 잠금을 기다리는 경우 스레드 1은 스레드 2를 기다리고 있습니다.

WCT는 다음 동기화 기본 형식을 지원합니다.

하나 이상의 스레드에 대한 대기 체인을 검색하려면 OpenThreadWaitChainSessionGetThreadWaitChain 함수를 사용하여 WCT 세션을 만듭니다. WCT 세션은 HWCT 형식의 핸들로 표시됩니다.

세션은 동기식 또는 비동기식일 수 있습니다.

대기 체인이 검색될 때까지 동기 세션을 취소하고 호출 스레드를 차단할 수 없습니다.

비동기 세션은 호출 스레드를 차단하지 않으며 CloseThreadWaitChainSession 함수를 사용하여 애플리케이션에서 취소할 수 있습니다. 비동기 작업의 결과는 애플리케이션에서 제공하는 WaitChainCallback 콜백 함수를 통해 사용할 수 있습니다.

비동기 세션의 경우 호출자는 GetThreadWaitChain을 통해 컨텍스트 데이터 구조에 대한 포인터를 지정할 수 있습니다. 이 동일한 포인터는 WaitChainCallback 콜백 함수에 전달됩니다.

컨텍스트 데이터 구조는 사용자 정의이며 WCT에 불투명합니다. 컨텍스트 데이터 구조는 애플리케이션에서 WCT 쿼리와 콜백 함수 간에 컨텍스트를 전달하는 데 사용할 수 있습니다. 일반적으로 이 구조체를 통해 이벤트 핸들을 전달하고 콜백이 실행될 때 이 이벤트가 신호를 받고 모니터링 스레드에 쿼리가 완료되었음을 알립니다.

대기 체인 통과의 예는 WCT 사용을 참조하세요.

참고 항목