#c #multithreading #process
#c #многопоточность #процесс
Вопрос:
Мой язык проекта — C, и он будет запускать только один процесс и несколько потоков.
Один из потоков всегда сбой, это приведет к сбою процесса.
Стабильность процесса очень и очень важна. Итак, я хочу знать, возможно ли «изолировать» этот поток. Например, если мы можем перехватить сигнал SIGSEGV, мы можем просто перезапустить этот поток.
Ответ №1:
Если один поток делает что-то, что может вызвать сбой, это может повлиять на другой поток, поскольку они используют одно и то же пространство памяти, поэтому их невозможно изолировать.
Вам нужно исправить свою программу, чтобы она не зависала в первую очередь. Начните с использования средства проверки памяти, такого как valgrind.
Ответ №2:
Стабильность процесса очень и очень важна.
Тогда очень, очень важно, чтобы вы нашли и устранили причину SIGSEGV, а не «заделывали трещины», пытаясь восстановить поврежденные потоки.
Почему?
- Потому что основной причиной SIGSEGV может быть ошибка, которая будет повторно запущена в перезапущенном потоке, что приведет к бесконечному сбою / перезапуску потоков.
- Потому что основной причиной SIGSEGV может быть проблема в другом потоке… что может продолжать вызывать проблему.
- Потому что на этапах выполнения, ведущих к SIGSEGV, поток мог повредить общие структуры данных или сделать другие вещи, которые могут привести к сбою, зависанию или неправильному поведению других потоков другими способами.
Ответ №3:
Зависит от причины сбоя. Это может быть связано с памятью, что приводит к повреждению данных, что приводит к сбою процесса. Если программа действительно аварийно завершает работу, и это критично, используйте Monit для ее перезапуска.