Пакет представляет из себя:
* заголовок - поле фиксированной длины
* данные - поле переменой длины (<= MAX_LEN), заполненное бинарными
случайными данными.
Как лучше всего сделать такой обмен?
Я удумал следующее.
1. Канал. Пишем, читаем. Но поскольку он имеет байтный интерфейс, при
последовательном чтении непонятно, где начинается заголовок. Значит,
придется вводить какие-то механизмы для его нахождения (Escape
последовательности и пр.). Это не сложно, но совершенно лишнее действие
в контексте решаемой задачи (нужно ее решить максимально быстро по
программированию, расход памяти и процессорного времени не важен (в
разумных пределах)).
2. Разделяемая память. Наделать там кучу семафоров, и обмениться
указателями на структуры.
3. Гибрид

Делаем разделяемую память, а там - кольцевой массив структур. Каждая
структура - это сообщение, данные пакета аппроксимированы массивом
максимальной длины (пустые места в памяти не волнуют).
2 потока для каждого направления обмена.
Передающий процесс пишет в поток send_msg char значение номера
элемента в массиве, куда он положил пакет.
Принимающий процесс пишет в поток msg_ask char значение номера элемента в
массиве, который он прочитал (освободил).
IMHO, так еще будет быстрее всего (нет лишнего копирования) и
экономнее (по памяти) всего (нет памяти для лишних копий).
Вероятно, я изобретаю велосипед. А что скажут Гуру по данному поводу?