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

How to terminate and stop the task in TBB?

本文关键字:任务 终止 TBB      更新时间:2023-10-16

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

您是想突然终止任务,还是只是让它顺利地离开循环,这样任务就可以自己结束了?

对于第一种情况,你可以使用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()