В чем разница между std::thread и std::async?

Хотелось бы понять, в чем разница между std::thread и std::async в плане организации работы с многопоточностью. Этот вопрос уже задавался вот тут В чем принципиальная разница между std::async (launch) и std::thread?, но мне хотелось бы получить более углубленный ответ.

Мне приходилось использовать потоки вот так:

void funcA() {
    // do something
}
...
std::thread t1(funcA);
// do something else
t1.join();

А асинк я использовал вот так

bool funcB() {
    bool val;
    // do something
    return val;
}
...
std::future<bool> futureResultB = std::async(std::launch::async, [&]() {
        return funcB();
});
// do something else
auto res = futureResultB.get();

Мне кажется, что эти два куска кода делают практически одно и то же, если не обращать внимание на то, что в одном случае есть возвращаемое значение, а в другом - нет.

Хотелось бы понять, какие особенности работы есть у каждого из этих инструментов, что может один, чего не может другой? Я понимаю, что я использую многопоточку на очень примитивном уровне, поэтому хотелось бы понять, какие возможности предоставляет каждый из способов?


Ответы (0 шт):