Как безопасно fork () многопоточный процесс? - PullRequest
0 голосов
/ 11 февраля 2020

Моя программа зависит от сторонней библиотеки c. Библиотека запустит поток, вызванный инициализацией глобальной переменной, и поток заблокирует мьютекс, и я не могу изменить сторонний код. В моей программе из main () я вызову fork () и выйду, чтобы сделать мою программу демоном.

Поведение, описанное выше, может привести к мертвой блокировке, поскольку блокировка не может быть разблокирована в дочернем процессе разветвляется, когда глобальная переменная не инициализируется после main ().

Так что теперь я хочу сделать, чтобы обработать процесс до загрузки сторонней библиотеки stati c. Так есть ли правильный способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Используйте другую программу, которая выполняет демонизацию, а затем исполняет вашу программу.

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

0 голосов
/ 11 февраля 2020

Итак, теперь я хочу разорвать процесс до загрузки сторонней библиотеки stati c. Так есть ли правильный способ добиться этого?

«Перед загрузкой библиотеки stati c» - это не вещь, библиотеки stati c связаны во время сборки, а не загружаются динамически во время выполнения.

Библиотека запустит поток, инициируемый инициализацией глобальной переменной

Вы должны рассмотреть вопрос об использовании библиотеки с лучшим дизайном или работать с сопровождающим придумать более продуманную схему инициализации. Жизнь перед главным обычно плохая идея. Создание потоков перед main - действительно плохая идея. Альтернативой может быть использование ленивого состояния c, которое срабатывает при каждом вызове API библиотеки, или, что еще лучше, введение явной функции инициализации или использование контекстных указателей, чтобы пользователь мог управлять состоянием библиотеки. Извините, звучит так, будто эта штука - огонь из шин, и нет никакого вменяемого способа ее раскошелиться, пока вы не потратите время на ее исправление.

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