Аварийное завершение параллельного потока
От: LaptevVV Россия  
Дата: 30.10.14 08:40
Оценка: +1
Осваиваю тут параллельные потоки на стандартном С++ — книжка Энтони Уильямса: https://www.ozon.ru/context/detail/id/26893657/
Возник вроде простой вопрос, но никак не найду на него ответа.
Вот запустили мы два треда, которые друг от друга не зависят по данным:
 thread ONE ((NullingGrid_2));        // -- запустили параллельный тред --
 NullingGrid_1(); }
 ONE.join();

NullingGrid_1() — это главный поток, естественно.
Пока аварий нет — все прекрасно.
Допустим, каждый из тредов просит динамическую память.
И может возникнуть bad_alloc.
В главном потоке мы это можем отследить:
thread ONE ((NullingGrid_2));    // -- запустили параллельный тред --
  try
  { NullingGrid_1(); }
  catch(bad_alloc)
  { ONE.join();
    throw;                      // -- передаем дальше --
  }
  ONE.join();

Однако! Если случилось в параллельном треде — мы там внутри него поймаем исключение.
Но! Как мне из параллельного треда сообщить в главный о bad_alloc?
Потому как параллельный поток аварийно завершается, и весь процесс — вместе с ним.
А мне хотелось бы иметь управляемость в главном потоке.

Надо передавать информацию об аварии главному потоку специально?
Что порекомендуете: условные переменные, будущие результаты?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.