Я читал abut std :: async с помощью std :: launch :: async и читал, что с этой политикой вызываемый объект будет вызываться в новом потоке.
Итак, ради теста я сделал следующее:
struct Wrapper
{
void consume()
{
std::cout << "consume " << std::this_thread::get_id() << std::endl;
std::for_each(arr.begin(), arr.end(), [](int val) {std::cout << val; });
}
bool produce()
{
std::cout << "produce " << std::this_thread::get_id() << std::endl;
arr = { 1,0,3 };
return true;
}
};
int main()
{
std::cout << "main " << std::this_thread::get_id() << std::endl;
Wrapper wrap;
std::future<bool> fut = std::async(std::launch::async, &Wrapper::produce, &wrap);
if (fut.get())
std::async(std::launch::async, &Wrapper::consume, &wrap);
}
Итак, исходя из этого, я буду ожидать 3 потока:
- нить 1: основная нить
- поток 2: первый вызов std :: async (выполнение команды fct)
- поток 3: второй вызов std :: async (выполнение функции fct)
когда я запускаю программу, я получаю:
Почему два вызова std :: async имеют одинаковый идентификатор потока ??
Спасибо.