处理任务时,例如:
class MyTask: public tbb::task {
private:
int x;
private:
void DoSomething(...){...} // Invoked only inside execute
void DoMore(...){...} // Invoked only inside execute
public:
MyTasks(...){...}
tbb::task* execute(){...}
};
一旦任务运行,是否可以同时执行DoSomething()或DoMore(),或者这些方法只能由开始执行任务的线程调用?
我读到TBB允许偷工作,但它偷了什么?它是否窃取了一段数据,计算并将结果返回给主线程,或者窃取是否可能执行私有方法?
对不起如果我的问题不明确!
感谢。
答案 0 :(得分:2)
TBB窃取任务,即从tbb::task
派生的类的实例。然后调用该任务的方法execute()
。此方法由单个线程执行,但它可以生成放入线程本地任务池的新任务,并且可以被其他线程窃取。
在您的情况下,仅由execute()
调用的私有方法不会同时运行。