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
We will use futures, so read the previous recipe to get a quick overview of how they work. Both async() and future are available in the std namespace in the <future>Â header.Â
For the examples in this recipe, we will use the following functions:
   void do_something()
   {
// simulate long running operation
{
...