リソース ディスペンサーのリソース割り当てプロセス
リソース ディスペンサーが所有者からリソースを割り当てるたびに、次の処理が行われます。
リソース ディスペンサーは、必要なリソースの種類を記述するリソースの種類識別子 (RESTYPID) を宣言します。
リソース ディスペンサーは、ホルダーの IHolder::AllocResource メソッドを呼び出し、この RESTYPIDを渡します。
所有者は、使用可能なリソースから候補リストを生成します。 候補は、トランザクションに参加していないリソース、または呼び出し元オブジェクトのトランザクションに既に参加しているリソースです。
これらの候補は、IDispenserDriver::RateResource メソッドに個別に渡されます。このメソッドでは、候補リソースが目的の RESTYPIDとどの程度一致するかによって評価されます (0 から 100 のスケール)。
所有者は、リソース ディスペンサーのレートが最も高いリソースを選択します。
リソース ディスペンサーは、候補にリソースレーティング 100 (完璧に適合) を割り当てることで、評価ループを早期に終了できます。 通常、100 のレーティングは、リソース ディスペンサーが参加が安価な操作であると判断しない限り、既に適切に参加している候補リソース用に予約されます。 すべての候補リソース (存在する場合) が 0 (使用できない) と評価されている場合は、IDispenserDriver::CreateResource呼び出すことによって新しいリソースが作成されます。
以前に選択したリソースがまだ呼び出し元オブジェクトのトランザクションに参加していない場合は、リソース ディスペンサーの IDispenserDriver::EnlistResource メソッドが呼び出されます。
AllocResource メソッドの呼び出しは、参加しているリソースを含むリソース ディスペンサーに戻ります。
関連トピック