Я использую библиотеку C++, которая предназначена для многопоточной обработки, и число рабочих потоков может быть установлено с использованием переменной. В библиотеке используются pthreads. Проблема возникает, когда я запускаю приложение, которое предоставляется как тест библиотеки, на четырехъядерном компьютере, используя 3 потока или больше. Приложение завершает работу с ошибкой времени сбоя сегментации. Когда я пытаюсь вставить некоторые трассировки «cout» в некоторых частях библиотеки, проблема решена, и приложение заканчивается нормально. При работе на одноядерной машине, независимо от того, какое количество потоков используется, приложение заканчивается нормально.Ошибка сегментации только при работе на многоядерном
Как я могу определить, где проблема?
Это какая-то ошибка синхронизации? как я могу его найти? есть ли какой-нибудь инструмент, который я могу использовать, тоже проверить код?
Из вашего описания, похоже, гоночное состояние, где один из потоков, скорее всего, пытается получить доступ к памяти, которая еще не инициализирована другим потоком. Возможно, вы захотите воспроизвести его под отладчиком и посмотреть на стек вызовов в точке отказа. –
Я действительно не знаю, где точка отказа, потому что в режиме отладки проблема не появляется. – Navid
Некоторые компиляторы в режиме отладки инициализируют переменные по их значениям по умолчанию, поэтому это может не произойти в режиме отладки –