关于tbb任务

时间:2012-04-11 10:14:49

标签: concurrency tbb

处理任务时,例如:

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允许偷工作,但它偷了什么?它是否窃取了一段数据,计算并将结果返回给主线程,或者窃取是否可能执行私有方法?

对不起如果我的问题不明确!

感谢。

1 个答案:

答案 0 :(得分:2)

TBB窃取任务,即从tbb::task派生的类的实例。然后调用该任务的方法execute()。此方法由单个线程执行,但它可以生成放入线程本地任务池的新任务,并且可以被其他线程窃取。

在您的情况下,仅由execute()调用的私有方法不会同时运行。