IUMSThreadProxy 構造体
実行スレッドの抽象化です。 ユーザー モード スケジュール可能 (UMS) スレッドをスケジューラに付与するには、スケジューラ ポリシー要素 SchedulerKind
の値を UmsThreadDefault
に設定し、さらに IUMSScheduler
インターフェイスを実装する必要があります。 UMS スレッドは、Windows 7 以上のバージョンの 64 ビット オペレーティング システムでのみサポートされます。
構文
struct IUMSThreadProxy : public IThreadProxy;
メンバー
パブリック メソッド
名前 | 説明 |
---|---|
IUMSThreadProxy::EnterCriticalRegion | 重要なリージョンに入るために呼び出されます。 クリティカル リージョン内の場合、スケジューラは、リージョンの間に発生する非同期ブロック操作を監視します。 つまり、UMS スレッドのページ フォールト、スレッドの中断、カーネルの非同期プロシージャ呼び出し (APC) などについて、スケジューラは再入力されません。 |
IUMSThreadProxy::EnterHyperCriticalRegion | ハイパークリティカル リージョンに入るために呼び出されます。 ハイパークリティカル リージョン内の場合、スケジューラは、リージョンの間に発生する非同期ブロック操作を監視しません。 つまり、スケジューラは、UMS スレッドに対する関数呼び出しのブロック、ロック取得試行 (ブロック、ページ フォールト、スレッドの停止、カーネルの非同期プロシージャ呼び出し (APC)) などに対して再入力しません。 |
IUMSThreadProxy::ExitCriticalRegion | クリティカル リージョンから出るために呼び出されます。 |
IUMSThreadProxy::ExitHyperCriticalRegion | ハイパークリティカル リージョンから出るために呼び出されます。 |
IUMSThreadProxy::GetCriticalRegionType | スレッド プロキシが含まれるクリティカル リージョンの種類を返します。 ハイパークリティカル リージョンはクリティカル リージョンのスーパーセットなので、コードがクリティカル リージョンに入った後にハイパークリティカル リージョンに入った場合は InsideHyperCriticalRegion が返されます。 |
継承階層
IUMSThreadProxy
要件
ヘッダー: concrtrm.h
名前空間: concurrency
IUMSThreadProxy::EnterCriticalRegion メソッド
重要なリージョンに入るために呼び出されます。 クリティカル リージョン内の場合、スケジューラは、リージョンの間に発生する非同期ブロック操作を監視します。 つまり、UMS スレッドのページ フォールト、スレッドの中断、カーネルの非同期プロシージャ呼び出し (APC) などについて、スケジューラは再入力されません。
virtual int EnterCriticalRegion() = 0;
戻り値
クリティカル リージョンの新しい深さ。 重要なリージョンは再入可能です。
IUMSThreadProxy::EnterHyperCriticalRegion メソッド
ハイパークリティカル リージョンに入るために呼び出されます。 ハイパークリティカル リージョン内の場合、スケジューラは、リージョンの間に発生する非同期ブロック操作を監視しません。 つまり、スケジューラは、UMS スレッドに対する関数呼び出しのブロック、ロック取得試行 (ブロック、ページ フォールト、スレッドの停止、カーネルの非同期プロシージャ呼び出し (APC)) などに対して再入力しません。
virtual int EnterHyperCriticalRegion() = 0;
戻り値
ハイパークリティカル リージョンの新しい深さ。 ハイパークリティカル リージョンは再入可能です。
解説
スケジューラは、呼び出すメソッドと、そのようなリージョンで取得するロックについて、非常に注意する必要があります。 このようなリージョン内のコードが、スケジューラがスケジュール設定を担当する何かに保持されているロックをブロックすると、デッドロックが発生する可能性があります。
IUMSThreadProxy::ExitCriticalRegion メソッド
クリティカル リージョンから出るために呼び出されます。
virtual int ExitCriticalRegion() = 0;
戻り値
クリティカル リージョンの新しい深さ。 重要なリージョンは再入可能です。
IUMSThreadProxy::ExitHyperCriticalRegion メソッド
ハイパークリティカル リージョンから出るために呼び出されます。
virtual int ExitHyperCriticalRegion() = 0;
戻り値
ハイパークリティカル リージョンの新しい深さ。 ハイパークリティカル リージョンは再入可能です。
IUMSThreadProxy::GetCriticalRegionType メソッド
スレッド プロキシが含まれるクリティカル リージョンの種類を返します。 ハイパークリティカル リージョンはクリティカル リージョンのスーパーセットなので、コードがクリティカル リージョンに入った後にハイパークリティカル リージョンに入った場合は InsideHyperCriticalRegion
が返されます。
virtual CriticalRegionType GetCriticalRegionType() const = 0;
戻り値
スレッド プロキシが含まれるクリティカル リージョンの種類。