明示的なタスクの破棄

通常、タスクはその execute メソッドがリターンした後、スケジューラーによって自動的に破棄されます。 しかし、execute を実行しないで慣用句的 (例えば、参照カウント) に使用されるタスク・オブジェクトもあります。 そのようなタスクは、destroy メソッドを使用して処理してください。

static void destroy ( task& victim )

要件

victim の参照カウントが 0 であること。この要件はライブラリーのデバッグバージョンでチェックされます。

効果

victim オブジェクトのデストラクターを呼び出してメモリー割り当てを解除します。victim.parent が NULL でない場合、victim.parent->refcount をアトミックにデクリメントします。その refcount が 0 になる場合、親はレディプールに格納されません。下記の図は、状態遷移を要約したものです。

destroy(victim) の効果

parent が null の場合、refcount の調整はスキップされます。