Обработка исключений внутри функции потока

У меня есть многопоточное приложение, использующее C ++ (не C ++ 11), использующее pthread. Итак, у меня есть пара потоков, работающих параллельно с соответствующими функциями потоков. В блоке основного потока у меня есть блок try-catch, но в функции потока у меня нет. Каждая функция потока (кроме основной) выполняется в то время как (1) цикл и прерывается, когда основной поток устанавливает определенное условие, указывающее на выход. Проверка и установка условных переменных выполняются в мьютекс-охранниках для обеспечения взаимного исключения. Однако внутри функции потока произошло исключение, и поток превратился в зомби, и приложение упало. Ядро pstack не может правильно показать трассировку стека, так как это могло быть повреждено. Мой вопрос: я должен использовать блок try-catch для обработки исключений с помощью функции потока тоже? Конечно, вне блока try должен быть блок while (1), а блок catch должен корректно обрабатывать исключение, а затем, вероятно, корректно завершаться. Можно ли передать исключение из дочернего потока, переданного во второй поток? В идеале нет. Какой должна быть лучшая практика?

0

Решение

я должен использовать блок try-catch для обработки исключений с помощью функции потока
тоже?

Да, потому что исключения являются механизмом на основе стека. Поскольку каждый поток имеет свой собственный стек, у него есть свои исключения.

Если у вас нет языковой поддержки для передачи исключений, вам придется прибегнуть к «ручному» копированию объекта исключительной ситуации в перехвате и передаче сигнала любому потоку, который должен знать об этом, с помощью некоторых межпоточных коммуникаций, характерных для вашего дизайна.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector