Вы можете использовать flock для получения блокировки дескриптора файла - это будет означать, что процесс записи будет блокироваться до тех пор, пока он не сможет получить эксклюзивную блокировку.
Итак, ваши читатели получат общую блокировку LOCK_SH, а затем просто используют fpassthru для вывода файла и, наконец, снимают блокировку.
Запись получит эксклюзивную блокировку LOCK_EX, выполнит безопасную запись, а затем снимет блокировку, позволяющую любым заблокированным считывателям начать извлечение нового файла.