我正在使用C++编写一个并发持久化消息队列,需要对文件进行并发读取,但不能使用内存映射io。简而言之,多个线程将需要从文件的不同偏移量处进行读取。
最初,我有一个文件对象,其中包含典型的读/写方法,线程将获取互斥锁以调用这些方法。然而,某个地方我没有正确获取互斥锁,导致一个线程在读/写过程中移动了文件偏移量,另一个线程开始读/写文件的错误部分。
因此,谨慎的解决方案是为每个线程拥有一个打开的文件句柄。现在,我有很多文件句柄指向同一个文件,我认为这可能不太好。
我想使用类似于 pread 的东西,它允许将当前偏移量传递给读/写函数。
然而,该函数仅在Linux上可用,我需要在Windows、AIX、Solaris和HP-UX上实现相当的功能,有什么建议吗?
最初,我有一个文件对象,其中包含典型的读/写方法,线程将获取互斥锁以调用这些方法。然而,某个地方我没有正确获取互斥锁,导致一个线程在读/写过程中移动了文件偏移量,另一个线程开始读/写文件的错误部分。
因此,谨慎的解决方案是为每个线程拥有一个打开的文件句柄。现在,我有很多文件句柄指向同一个文件,我认为这可能不太好。
我想使用类似于 pread 的东西,它允许将当前偏移量传递给读/写函数。
然而,该函数仅在Linux上可用,我需要在Windows、AIX、Solaris和HP-UX上实现相当的功能,有什么建议吗?