асинхронный ввод / вывод между тремя процессами - PullRequest
1 голос
/ 06 февраля 2012

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

Существует три процесса, 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 получит второе сообщение (первое или второе с точки зрения временной шкалы)?

Я понимаю, что может быть недостаточно информации, чтобы делать какие-либо предположения, но каковы основные подходы к отладке асинхронного ввода-вывода и ситуаций, подобных моей?

Заранее большое спасибо!

...