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 が返されます。

継承階層

IThreadProxy

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;

戻り値

スレッド プロキシが含まれるクリティカル リージョンの種類。

関連項目

コンカレンシー名前空間
IUMSScheduler 構造体