Имеется некоторое приложение, которое получает бинарные данные из некого потока информации (пусть это будет FIFO-файл). Хочется, чтобы несколько других приложений могли обрабатывать эти данные в реальном времени. Для этого реализована схема с двойной буферизацией: в каждый момент времени в одном из буферов находятся все обработчики, а в другой в это время происходит запись. Синхронизация основана на двух семафорах. Проблема состоит в следующем: обработчик информации может захватить семафор и заблокироваться на неопределенный момент времени во время чтения. Из-за этого обработчики сразу же делают memcpy() всего буфера в локальную память и отпускают блокировку. В случае если они задерживаются, то происходит восстановление из архива, требующее I/O. Возможно имеется какая-то известная схема решения этой проблемы?