Вопрос по поводу нескольких потоков и segfaults - PullRequest
2 голосов
/ 31 августа 2010

Что происходит, когда два потока одного и того же процесса, работающего на другом логическом процессоре, сталкиваются с ошибкой сегмента?

Ответы [ 5 ]

4 голосов
/ 31 августа 2010

Действие по умолчанию для выхода из процесса. Если вы обрабатываете segfault, я полагаю, вы могли бы попытаться организовать только поток, в котором он завершился. Однако, поскольку единственное, что вызывает естественное возникновение ошибки (в отличие от raise или kill), происходит из-за неопределенного поведения, программа находится в неопределенном состоянии, и вы не можете рассчитывать на то, что сможете что-либо восстановить.

3 голосов
/ 31 августа 2010

Нормальная обработка ошибки сегментации включает в себя завершение процесса. Это означает, что оба они прекращены.

2 голосов
/ 31 августа 2010

Я думаю, что действие по умолчанию на всех основных ОС - завершить процесс. Однако вы могли бы предположительно установить (например, используя signal) альтернативный обработчик, который только завершил поток. Конечно, если у вас есть ошибка сегментации, поведение обычно становится неопределенным, и попытка продолжить рискованна.

1 голос
/ 31 августа 2010

Сигналы, сгенерированные из-за неправильного выполнения, обрабатываются ядром синхронно.Таким образом, даже если оба потока генерируют ошибку сегмента одновременно, только один получает через '.

0 голосов
/ 31 августа 2010

Обработчик segfault вызывается для процесса. Если вы не сделаете ничего особенного, ОС завершит процесс и вернет его ресурсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...