在处理任务时,例如使用以下命令:
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允许窃取工作,但它窃取的是什么?它是否窃取了一段数据,计算并将结果返回给主线程,或者窃取是否可能执行私有方法?
如果我的问题不清楚,很抱歉!
谢谢。
发布于 2012-04-11 20:56:22
TBB窃取了一个任务,即从tbb::task派生的类的实例。然后调用任务的方法execute()。此方法由单个线程执行,但它可以生成放入线程的本地任务池中的新任务,并且可以被其他线程窃取。
在您的示例中,仅由execute()调用的私有方法将不会并发运行。
https://stackoverflow.com/questions/10103965
复制相似问题