Вызов метода Eigen .row () вызывает неожиданную основную программу cra sh после завершения связанного потока - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть большая C ++ многопоточная среда Visual Studio . Основной процесс запускает набор потоков для одновременного запуска различных подпрограмм, а затем ожидает их присоединения. Однако во время выполнения я столкнулся с неожиданным поведением, так как основная программа завершает работу и закрывается перед присоединением ко всем потокам , но в командной строке не отображаются утверждения, исключения или сообщения об ошибках.

После нескольких испытаний и действий по отладке я мог бы выделить одно изменение атома c между правильно работающим поведением программы (правильное соединение и завершение потока) и нежелательным. В частности, Я заметил, что основная программа неожиданно завершает работу после завершения обратного вызова потока, вызывающего метод Eigen .row() в собственной матрице : обратный вызов потока, кажется, правильно выполняет связанную инструкцию (т. Е. Выходной вектор успешно назначен выбранной строке входной матрицы) и завершается sh должным образом, но по какой-то причине основной поток не может присоединиться к нему и немедленно завершается. Если я заменим вызов метода .row() явным поэлементным назначением вектора , такое поведение не произойдет, основной поток правильно присоединится к , и программа продолжит и завершается, как и ожидалось.

Я действительно не знаю, вызвана ли проблема, с которой я сталкиваюсь, этим методом Эйгена, но я не смог найти другого различающего фактора для отладки проблемы.

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

Спасибо заранее

...