A task_group represents concurrent execution of a group of tasks. Tasks may be dynamically added to the group as it is executing.
#include "tbb/task_group.h"
int Fib(int n) {
if( n<2 ) {
return n;
} else {
int x, y;
tbb::task_group g;
g.run([&]{x=Fib(n-1);}); // spawn a task
g.run([&]{y=Fib(n-2);}); // spawn another task
g.wait(); // wait for both tasks to complete
return x+y;
}
}
Creating a large number of tasks for a single task_group is not scalable, because task creation becomes a serial bottleneck. If creating more than a small number of concurrent tasks, consider using parallel_for or parallel_invoke instead, or structure the spawning as a recursive tree.
namespace tbb {
class task_group {
public:
task_group();
~task_group();
// Supported until C++11
template<typename Func>
void run( const Func& f );
// Supported since C++11
template<typename Func>
void run( Func&& f );
template<typename Func>
void run( task_handle<Func>& handle );
template<typename Func>
task_group_status run_and_wait( const Func& f );
template<typename Func>
task_group_status run_and_wait( task_handle<Func>& handle );
task_group_status wait();
bool is_canceling();
void cancel();
};
}
| Member | Description |
|---|---|
| task_group() |
Constructs an empty task_group. |
| ~task_group() |
Destroys the task_group. Requires: Method wait must be called before destroying a task_group, otherwise the destructor throws an exception. |
|
Until C++11: template<typename Func> void run( const Func& f ) Since C++11: template<typename Func> void run( Func&& f ) |
Spawns a task to computef() and returns immediately. |
| template<typename Func> void run ( task_handle<Func>& handle ); |
Spawns a task to compute handle() and returns immediately. |
| template<typename Func> task_group_status run_and_wait( const Func& f ) |
Equivalent to {run(f); return wait();}, but guarantees that f() runs on the current thread. NoteTemplate method run_and_wait is intended to be more efficient than separate calls to run and wait. |
| template<typename Func> task_group_status run_and_wait( task_handle<Func>& handle ); |
Equivalent to {run(handle); return wait();}, but guarantees that handle() runs on the current thread. NoteTemplate method run_and_wait is intended to be more efficient than separate calls to run and wait. |
| task_group_status wait() |
Waits for all tasks in the group to complete or be cancelled. Returns: The status of task_group More information |
| bool is_canceling() |
Returns: True if this task group is cancelling its tasks. |
| void cancel() |
Cancels all tasks in this task_group. |