C++, деструктор std::future

158
28 декабря 2021, 09:00

Рассмотрим следующий код:

bool infinity()
{
  while (1)
  {
    int i = 1;
  }
  return true;
}
int main()
{
  try
  {
    future<bool> f = async(std::launch::async, infinity);
    throw 1;
  }
  catch (...)
  {
  }
  cout << "After catch" << endl;
}

В моем представлении здесь произойдет следующее:

  • Фьючерс f ожидает результат функции infinity, которая запущена в фоновом режиме;
  • Функция infinity не планирует завершаться;
  • В том потоке, в котором находится фьючерс f, возникает исключение;
  • Происходит вызов деструктора фьючерса f;
  • Поток, в котором вызывается деструктор фьючерса f, блокируется.

То есть, я хочу понять, действительно ли деструктор фьючерса блокирует поток, в котором находится фьючерс, до тех пор, пока поток, результат которого нужен фьючерсу, не завершится (предоставит результат своего выполнения)?

Дело может быть не только в исключении, но и в обыкновенном выходе из пространства видимости, в котором находится объект-фьючерс.

READ ALSO
C++, std::async() и не статические методы

C++, std::async() и не статические методы

Рассмотрим следующий код:

219
При повторном переборе массива всегда возвращается последнее значение

При повторном переборе массива всегда возвращается последнее значение

Вроде простейшая задача, но какая-то фигняСам код:

216
ACMP Сортировка выбором

ACMP Сортировка выбором

В этой задаче вам предлагается реализовать сортировку выбором

117
Как правильно использовать класс SqlConnection

Как правильно использовать класс SqlConnection

Недавно начал работать с классом SqlConnectionЯ написал обёртку databaseHelper, и у меня возникла проблема

147