Это можно сделать с помощью системы защиты от перегрузки, аналогичной той, которая используется в Ethernet.
Сначала присвойте каждой трубе уникальный разделитель. Этот разделитель не может появляться без содержимого в любой трубе. Теперь используйте следующий псевдокод:
- Проверить разделитель другого процесса; пока присутствует нечетное число разделителей одного другого процесса, подождите.
- Написать символ-разделитель.
- Проверьте, не написал ли другой процесс несоответствующий разделитель. Если это так, отмените случайное (увеличивающееся) количество и вернитесь к первому шагу.
- Запись данных.
- Написать символ-разделитель.
Это гарантирует, что, хотя у вас будет немного мусора, каждое целое сообщение в конечном итоге пройдет.