Обработка сигналов в приложении MPI / Изящный выход

Как можно обрабатывать сигналы в безопасном и MPI-приложении (например, SIGUSR1, который должен сообщить приложению, что его время выполнения истекло и должно завершиться в течение следующих 10 минут). У меня есть несколько ограничений:

Завершите все параллельные / последовательные операции ввода-вывода перед выходом из приложения!При любых других обстоятельствах приложение может выйти без проблем.

Как это может быть достигнуто безопасно, без тупиков при попытке выйти и правильно оставить текущий контекст, возвращаясь кmain() и звонитMPI_FINALIZE() ? Каким-то образом процессы должны согласовываться при выходе (я думаю, что это то же самое в многопоточных приложениях), но как это сделать эффективно, не связываясь со многими? Кто-нибудь знает какой-то стандартный способ сделать это правильно?

Ниже приведены некоторые мысли, которые могут или не могут работать:

Идея 1:
Допустим, для каждого процесса мы перехватываем сигнал в обработчике сигналов и помещаем его в «стек необработанных сигналов» (USS), и мы просто возвращаемся из процедуры обработчика сигналов. Затем в нашем приложении есть определенные точки завершения, особенно до и после операций ввода-вывода, которые затем обрабатывают все сигналы в USS. Например, если в USS есть SIGUSR1, то каждый процесс завершается в точке завершения.

Эта идея имеет проблему, заключающуюся в том, что все еще могут быть взаимоблокировки, процесс 1 просто перехватывает единственное число перед точкой завершения, в то время как процесс 2 уже прошел эту точку и теперь запускает параллельный ввод-вывод. процесс 1 завершится, что приведет к тупику в процессе 2 (ожидание выхода 1 для ввода-вывода, который завершился) ...

Идея 2:
Только главный процесс 0 улавливает сигнал в обработчике сигналов и затем отправляет широковещательное сообщение: «весь процесс завершен!» в конкретный момент в приложении. Все процессы получают широковещательную рассылку и бросок и исключение, которое отлавливаетсяmain а такжеMPI_FINALIZE называется.

Таким образом, выход происходит безопасно, но за счет необходимости постоянно получать широковещательные сообщения, чтобы увидеть, должны ли мы выйти или нет

Большое спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос