次の方法で共有


ISchedulerProxy::RequestInitialVirtualProcessors メソッド

仮想プロセッサ ルートの最初の割り当てを要求します。 仮想プロセッサ ルート 1 つにつき、スケジューラの処理を実行するためのスレッドを 1 つ実行できます。

virtual IExecutionResource * RequestInitialVirtualProcessors(
   bool doSubscribeCurrentThread
) =0;

パラメーター

  • doSubscribeCurrentThread
    リソースの割り当て中に現在のスレッドとそのアカウントをサブスクライブできるかどうか。

戻り値

doSubscribeCurrentThread パラメーターの値が true の場合は、現在のスレッドの IExecutionResource インターフェイス。 値が false の場合は、メソッドは NULL を返します。

解説

スケジューラは作業を実行する前に、このメソッドを使用してリソース マネージャーから仮想プロセッサ ルートを要求する必要があります。 リソース マネージャーは IScheduler::GetPolicy を使用してスケジューラのポリシーにアクセスし、MinConcurrencyMaxConcurrency、および TargetOversubscriptionFactor の各ポリシー キーの値を使用して、スケジューラに最初に割り当てるハードウェア スレッドの数、およびハードウェア スレッドごとに作成する仮想プロセッサ ルートの数を決定します。 スケジューラ ポリシーを使用してスケジューラの最初の割り当てを決定する方法の詳細については、「PolicyElementKey」を参照してください。

リソース マネージャーは、仮想プロセッサ ルートの一覧を使用して IScheduler::AddVirtualProcessors メソッドを呼び出すことで、スケジューラにリソースを付与します。 このメソッドは、メソッドから制御が戻る前にスケジューラへのコールバックとして呼び出されます。

スケジューラが doSubscribeCurrentThread パラメーターを true に設定することで現在のスレッドのサブスクリプションを要求した場合、メソッドは IExecutionResource インターフェイスを返します。 サブスクリプションは、IExecutionResource::Remove メソッドを使用して、後で終了する必要があります。

選択するハードウェア スレッドを決定する際に、リソース マネージャーはプロセッサ ノード アフィニティを最適化しようとします。 現在のスレッドに対してサブスクリプションが要求される場合、現在のスレッドがこのスケジューラに割り当てられている作業に参加しようとしていることを示します。 そのような場合、割り当てられた仮想プロセッサ ルートは、現在のスレッドが実行されているプロセッサ ノードに配置されます (可能な場合)。

スレッドをサブスクライブすると、基になるハードウェア スレッドのサブスクリプション レベルが 1 つ増加します。 サブスクリプションが終了すると、サブスクリプション レベルは 1 つ減少します。 サブスクリプション レベルの詳細については、「IExecutionResource::CurrentSubscriptionLevel」を参照してください。

必要条件

ヘッダー: concrtrm.h

名前空間: Concurrency

参照

参照

ISchedulerProxy 構造体