убийственная нить, вызывающая SIGSEGV - PullRequest
0 голосов
/ 08 декабря 2010

Немного информации: мне нужно написать программу, которая управляет некоторыми устройствами (это базовая функциональность). Но я должен написать какую-то систему плагинов для включения других пользовательских функций. У меня нет способа контролировать качество исходного кода этих плагинов, поэтому я решил, что создам поток для каждого загруженного плагина, а затем он будет работать в своем собственном основном цикле. Я могу ловить стандартные исключения C ++, но проблема в том, что я понятия не имею, что делать с сигналами. Лучшим способом было бы асинхронно отменить поток плагина, чтобы дать ему возможность очистить и освободить ресурс или просто убить его, но не знаю, как узнать, какой поток вызывает текущий сигнал. Есть ли способ сделать это без явного сохранения текущей информации о потоке в какой-либо переменной? Или это очень плохая идея, и я должен создать отдельный процесс, а затем запустить плагин?

Ответы [ 2 ]

0 голосов
/ 21 августа 2012

Я бы использовал традиционный процесс, чтобы получить полную изоляцию, и использовал бы механизм IPC для связи.

0 голосов
/ 27 августа 2011

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

...