Осваиваю тут параллельные потоки на стандартном С++ — книжка Энтони Уильямса:
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?
Потому как параллельный поток аварийно завершается, и весь процесс — вместе с ним.
А мне хотелось бы иметь управляемость в главном потоке.
Надо передавать информацию об аварии главному потоку специально?
Что порекомендуете: условные переменные, будущие результаты?