уничтожение потока, вызывающего SIGSEGV

#multithreading #posix #kill #signals

#многопоточность #posix #уничтожение #сигналы

Вопрос:

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

Ответ №1:

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

Ответ №2:

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