2012-04-11 66 views
1

当使用任务,例如本:关于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允许偷工减料,但偷了什么?它会窃取一段数据,计算它并将结果返回给主线程,还是有可能让窃取执行私有方法?

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

谢谢。

回答

2

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

就你而言,仅由​​调用的私有方法将不会同时运行。

+0

Thaaaaaanks loooot !!! – 2012-04-11 15:17:08