Executing functions asynchronously
Threads enable us to run multiple functions at the same time; this helps us take advantage of the hardware facilities in multiprocessor or multicore systems. However, threads require explicit, lower-level operations. An alternative to threads is tasks, which are units of work that run in a particular thread. The C++ standard does not provide a complete task library, but it enables developers to execute functions asynchronously on different threads and communicate results back through a promise-future channel, as seen in the previous recipe. In this recipe, we will see how to do this using std::async()
and std::future
.
Getting ready
For the examples in this recipe, we will use the following functions:
void do_something()
{
// simulate long running operation
{
using namespace std::chrono_literals;
std::this_thread::sleep_for(2s);
}
std::lock_guard<std::mutex> lock(g_mutex);
std::cout << "operation 1 done...