parallel_invoke

[algortihms.parallel_invoke]

Function template that evaluates several functions in parallel.

// Defined in header <oneapi/tbb/parallel_invoke.h>

namespace oneapi {
    namespace tbb {

        template<typename... Functions>
        void parallel_invoke(Functions&&... fs);

    } // namespace tbb
} // namespace oneapi

Requirements:

  • All members of Functions parameter pack must meet Function Objects requirements described in the [function.objects] section of the ISO C++ standard.

  • Last member of Functions parameter pack may be a task_group_context& type.

Evaluates each member passed to parallel_invoke possibly in parallel. Return values are ignored.

The algorithm can accept a task_group_context object so that the algorithm’s tasks are executed in this context. By default, the algorithm is executed in a bound context of its own.

Example

The following example evaluates f(), g(), h(), and bar(1) in parallel.

#include "oneapi/tbb/parallel_invoke.h"

extern void f();
extern void bar(int);

class MyFunctor {
    int arg;
public:
    MyFunctor(int a) : arg(a) {}
    void operator()() const { bar(arg); }
};

void RunFunctionsInParallel() {
    MyFunctor g(2);
    MyFunctor h(3);

    oneapi::tbb::parallel_invoke(f, g, h, []{bar(1);});
}