私は 2 つのタスクを実行している 1 つの問題に直面しています。1 つは親タスクで、もう 1 つは子タスクで、子タスクは 1 つの無限ループを実行しており、いくつかの条件が満たされている場合、子の実行を手動で終了したいと考えています。TBBでできること
1 に答える
1
タスクを突然終了しますか、それとも単にループをうまく終了させたいですか?タスクが自動的に終了できるようにしますか?
最初のケースでは、おそらくdestroyメソッドを使用できます
2番目のケースは、おそらくコードを構造化するためのより良い方法です。ループに次のような条件があるとしましょう
while(!finished) {
...
}
これを変更して変数のロックを使用するfinished
ことで、タスクの外部から変数にアクセスしたり、タスクを終了するときにその値を変更したりできます。タスクの外部と内部の両方で変数に直接アクセスする代わりに、次の関数を使用して値を読み書きする必要があります。
tbb::mutex lock;
bool finished;
void finish() {
lock.lock();
finished = true;
lock.unlock();
}
bool is_finished() {
lock.lock();
bool ret = finished;
lock.unlock();
return ret;
}
したがって、ループ条件は次のようになりwhile(! is_finished())
ます。メインスレッドのどこかで、task.finish()
終了したいときに呼び出すだけです。
于 2013-03-22T10:11:19.837 に答える