1

处理任务时,例如:

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

对不起,如果我的问题不清楚!

谢谢。

4

1 回答 1

2

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

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

于 2012-04-11T12:56:21.543 回答