mercredi 19 septembre 2018

C++ Async function not launched asynchronously

I am trying to launch a function asynchronously but it gets launched synchronously.

#include <thread>
#include <future>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

std::future<int> setPromise()
{
    auto promise = std::make_shared<std::promise<int>>();
    auto future = promise->get_future();
    auto asyncFn = [&]() {
      cout << "Async started ...\n";
      for(int i=0; i<100000; i++)
        for(int j=0; j<10000; j++) {}
      promise->set_value(400);
      fprintf(stderr, "Async ended ...\n");
    };
    std::async(std::launch::async, asyncFn);
    return future;
}

int main()
{
   std::future<int> result = setPromise();
   cout << "Asynchronously launched \n";
   int ret = result.get();
   cout << ret << endl;

   return 0;
}

Compiled it with the following command

g++ -std=c++11 -pthread promise.cpp -o promise 

I expect the lambda function to get called asynchronously and while the loop is running in asynchronous thread i expect the logs from the main. But i see the function never gets launched asynchronously and always the lambda gets completed and only then we get the next statements in main to be executed

What i expect

Async started ...
Asynchronously launched
Async ended ...

What i get is

Async started ...
Async ended ...
Asynchronously launched

Aucun commentaire:

Enregistrer un commentaire