О задачах 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 позволяет красть работу, но что она ворует? Ворует ли он часть данных, вычисляет ее и возвращает результат основному потоку, или может ли кража выполнять приватные методы?

Извините, если мой вопрос не ясен!

Спасибо.


person Adri C.S.    schedule 11.04.2012    source источник


Ответы (1)


TBB крадет задачу, то есть экземпляр класса, производного от tbb::task. Затем вызывается метод execute() задачи. Этот метод выполняется одним потоком, но он может создавать новые задачи, которые помещаются в локальный пул задач потока и могут быть украдены другими потоками.

В вашем случае частные методы, вызываемые только execute(), не будут выполняться одновременно.

person Alexey Kukanov    schedule 11.04.2012