如何在TBB中终止和停止任务?

时间:2013-03-22 09:56:41

标签: c++ tbb

我面临一个问题,其中我有两个任务正在运行,一个是父任务,一个是子任务,子任务正在运行一个无限循环,并且其中满足一些条件我想手动终止子执行。我如何在TBB中做到

1 个答案:

答案 0 :(得分:1)

你是想突然杀死这个任务,还是让它很好地离开循环,这个任务可以自己结束吗?

对于第一种情况,您可以使用destroy方法

第二种情况可能是构建代码的更好方法。假设您的循环具有类似

的条件
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()