(Я столкнулся с довольно сложным программным обеспечением, использующим асинхронный обмен сообщениями, и у меня есть хитрая ошибка, которая, на мой взгляд, имеет отношение к асинхронному вводу-выводу, поэтому я хотел бы уточнить некоторые концепции).
Существует три процесса, A, B и C, и A отправляет управляющие сообщения в B & C по каналу Unix. Теперь происходит следующее: процесс A отправляет команду B, если сетевое соединение не установлено, B отправляет команду C ('link up'), и C позже подтверждает, что A выполнено, поэтому B может изменить свое состояние конечного автомата.
Также в какой-то момент процесс A отправляет команду «link up» на C. Однако конечный автомат в B никогда не меняется, хотя, когда я выполняю пошаговую отладку с GDB, он функционирует правильно (проблема синхронизации и т. Д .?).
Также еще одно наблюдение - я устанавливаю точки останова в обоих процессах B и C, затем выполняю A - каждый раз, когда я запускаю сеанс отладки, B или C будут первыми, кто получит сообщение, поэтому нет гарантии, что B или C всегда первым получает сообщение (я не понимаю, почему).
Возможно ли, что асинхронные сообщения не доставляются по порядку, например, Сначала отправляется B, а затем C - может ли B получить свое сообщение first , а A получит второе сообщение (первое или второе с точки зрения временной шкалы)?
Я понимаю, что может быть недостаточно информации, чтобы делать какие-либо предположения, но каковы основные подходы к отладке асинхронного ввода-вывода и ситуаций, подобных моей?
Заранее большое спасибо!