我面临一个问题,其中我有两个任务正在运行,一个是父任务,一个是子任务,子任务正在运行一个无限循环,并且其中满足一些条件我想手动终止子执行。我如何在TBB中做到
答案 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()