Данная статья посвящена проблеме верификации параллельных программ, которые могут содержать особые виды ошибок, связанных с синхронизацией параллельно исполняемых потоков и доступом к общей памяти. К таким ошибкам относятся тупики и гонки данных. Существует разделение методов верификации параллельных программ на статические и динамические. Последние требуют запуска кода и позволяют проверить на гонки лишь текущую реализацию программы, что при наличии большого числа ветвлений может привести к пропуску гонок. Среди статических методов наибольшее применение нашли аналитические методы (например, на основе дедуктивного анализа) и методы проверки моделей. Однако они сложны в реализации, а последние по-прежнему требуют от программиста значительного объёма ручной работы для построения модели. В этой связи необходимо использование моделей, которые могут быть построены автоматически. Ранее авторами была разработана модель на основе расширения сетей Петри, позволяющая автоматическое построение на основе последовательного кода и преобразование её в параллельный код. Автоматическое построение модели параллельной программы вводит новые, ранее не использовавшиеся требования, связанные со взаимодействием параллельных потоков. Таким образом, в данной статье рассматриваются особенности моделирования с использованием расширенных сетей Петри с семантическими связями основных примитивов синхронизации, реализуемых в большинстве языков и технологий параллельного программирования для систем с общей памятью. В дальнейшем на основе этих моделей будет проводится поиск гонок данных и тупиков для параллельных программ.
Аварийным службам часто приходится проводить спасательные и ликвидационные работы в условиях отсутствия централизованной связи. Невозможность обеспечения стабильной коммуникации между членами спасательного подразделения существенно снижает качество проведения работ. При этом в современных реалиях под стабильной коммуникацией понимается не только голосовой обмен, который может быть обеспечен коротковолновыми радиопередатчиками, но и интенсивный обмен большими объемами трафика. Применение стандартных решений на основе типового сетевого оборудования (Wi-Fi, спутниковая связь и др.) и существующих алгоритмов обеспечения качества обслуживания в рассматриваемых условиях не позволяет быстро обеспечить информационный обмен между разнородными абонентами. Более того, работа в высокогерцовых диапазонах может быть сильно затруднена при наличии препятствий, что снижает общую площадь покрытия и качество передачи данных. Мы предлагаем протокол маршрутизации сетевого уровня, предназначенный для организации децентрализованной связи в подразделении аварийной службы, где абоненты отличаются разной степенью мобильности и типом передаваемого трафика. Данный протокол включает алгоритмы подключения к сети, обнаружения оптимального и альтернативных маршрутов связи, передачи и балансировки трафика по найденным маршрутам. Оригинальный алгоритм поиска маршрутов анализирует производительность каналов связи и определяет все возможные пути передачи трафика между абонентами. С использованием функции оценки маршрутов, основанной на градиентном бустинге деревьев принятия решений, производится формирование оптимальных и альтернативных маршрутов связи, а при передаче данных, на основе полученной информации, выполняется балансировка трафика. Экспериментальное исследование предложенного протокола показало улучшение показателей скорости развертывания и качества обслуживания на сценариях с различной степенью мобильности абонентов.