std::async function running serially

后端 未结 3 1895
自闭症患者
自闭症患者 2021-01-24 04:22

When using std::async with launch::async in a for loop, my code runs serially in the same thread, as if each async call waits for the previous before launching. In the notes for

3条回答
  •  灰色年华
    2021-01-24 05:05

    The std::future returned by async blocks in the destructor. That means when you reach the } of

    for(uint64_t start: chunksToDownload){
        DownloadItem cache = std::make_shared<__DownloadItem__>();
        cache->last_access = time(NULL);
        cache->future =
                std::async(std::launch::async, &FileIO::download, this, api,cache, cacheName, start, start + BLOCK_DOWNLOAD_SIZE - 1);
     }  // <-- When we get here
    

    cache is destroyed which in turn calls the destructor offuture which waits for the thread to finish.

    What you need to do is store each future returned from async in a separate persistent future that is declared outside of the for loop.

提交回复
热议问题