Что вы подразумеваете под "синхронизированными"? Если ваш читатель и писатель находятся в отдельных потоках, вы хотите, чтобы FIFO обрабатывал параллелизм «правильно», включая такие детали, как:
- правильное использование FIFO API никогда не должно приводить к повреждению структур данных
- правильное использование FIFO API не должно вызывать взаимоблокировку (хотя должен быть механизм, позволяющий читателю ждать, пока что-то будет прочитано)
- объекты, считываемые из FIFO, должны быть одинаковыми объектами в том же порядке, записанными в FIFO (не должно быть пропущенных объектов или в порядке перестановки)
- должно быть ограниченное время (можно надеяться!) Между тем, когда писатель помещает что-то в FIFO, и когда это доступно для читателя.
В мире Java есть хорошая книга по этому вопросу, Параллелизм Java на практике . Существует несколько способов реализовать FIFO, который правильно обрабатывает параллелизм. Самыми простыми реализациями являются блокирующие, а более сложные используют неблокирующие алгоритмы, основанные на инструкциях сравнения и замены, которые встречаются на большинстве процессоров в наши дни.