次の方法で共有


待機チェーンのトラバーサル

待機チェーン トラバーサル (WCT) を使用すると、デバッガーはアプリケーションのハングとデッドロックを診断できます。

待機チェーン は、スレッドと同期オブジェクトの交互のシーケンスです。各スレッドは、その後のオブジェクトを待機します。 次の各オブジェクトは、チェーン内の後続のスレッドによって所有されます。

スレッドは、スレッドがオブジェクトを要求してから取得されるまで、同期オブジェクトを待機します。 この ロック は、スレッドが取得してからスレッドが解放するまで、スレッドによって所有されます。 つまり、スレッド 1 がスレッド 2 が所有するロックを待機すると、スレッド 1 はスレッド 2 を 待機 します。

WCT では、次の同期プリミティブがサポートされています。

1 つ以上のスレッドの待機チェーンを取得するには、 OpenThreadWaitChainSession 関数と GetThreadWaitChain 関数を使用して WCT セッションを作成します。 WCT セッションは、 HWCT型のハンドルによって表されます。

セッションは同期または非同期にすることができます

待機チェーンが取得されるまで、同期セッションを取り消したり、呼び出し元のスレッドをブロックしたりすることはできません。

非同期セッションは呼び出し元のスレッドをブロックせず、 CloseThreadWaitChainSession 関数を使用して、アプリケーションによって取り消すことができます。 非同期操作の結果は、アプリケーションによって提供される WaitChainCallback コールバック関数を通じて使用できるようになります。

非同期セッションの場合、呼び出し元は GetThreadWaitChain を介してコンテキスト データ構造へのポインターを指定できます。 この同じポインターが WaitChainCallback コールバック関数に渡されます。

コンテキスト データ構造はユーザー定義であり、WCT に対して不透明です。 アプリケーションはコンテキスト データ構造を使用して、WCT クエリとコールバック関数の間でコンテキストを通信できます。 通常、この構造体を通じてイベント ハンドルを渡します。コールバックが実行されると、このイベントが通知され、クエリが完了したことが監視スレッドに通知されます。

待機チェーントラバーサルの例については、「WCT の使用」を参照してください。

関連項目