Я пишу параллельную постоянную очередь сообщений на С++, которая требует одновременного доступа для чтения к файлу без использования отображения памяти io. Короткая история заключается в том, что несколько потоков должны будут читать с разных смещений файла.
Первоначально у меня был файловый объект с типичными методами чтения/записи, и потоки получали мьютекс для вызова этих методов. Однако так получилось, что я где-то неправильно захватил мьютекс, из-за чего один поток переместил смещение файла во время чтения/записи, а другой поток начал чтение/запись в неправильную часть файла.
Таким образом, параноидальное решение состоит в том, чтобы иметь один дескриптор открытого файла для каждого потока. Теперь у меня есть много файловых дескрипторов для одного и того же файла, что, как я предполагаю, не может быть хорошим.
Я хотел бы использовать что-то вроде pread, что позволяет передавать текущее смещение для функций чтения/записи.
Однако эта функция доступна только в Linux, и мне нужны эквивалентные реализации для Windows, AIX, Solaris и HPUX, какие-либо предложения?