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 に答える