如何在跨平台下通过Qt中的多线程写入同一文件的不同区域

How to write to different region of same file by multi-thread in Qt under cross-platform?

本文关键字:多线程 区域 文件 跨平台 Qt      更新时间:2023-10-16

我需要多线程的跨平台解决方案来同时写入同一个文件,至少是Windows和Mac OS X。

文件有点大。可能是几 GB 或几百 MB。所以MMF不适合。

QFile 是跨平台重叠。我已经搜索了 QFile 文档,没有共享写入选项。

在Windows下,这可以通过CreateFile使用FILE_SHARE_WRITE选项来完成。Mac OS X呢?

Qt是否支持这一点,或者我应该自己做封装?如何在Mac OS X下执行此操作?

您可以将

QFileQReadWriteLock(文档)一起使用。

在 Mac OS X 上,多个进程或线程打开文件并在其中写入没有障碍,除非这些进程或线程专门选择加入协作锁定方案。这种选择加入的合作锁定方案称为"咨询锁定"。例如,flock()用于锁定整个文件,fcntl() 用于字节范围锁定。

根据QFile的实现方式,它可能允许按原样进行多线程编写。它必须采取特别步骤来禁止它。

当然,如果线程或进程没有通过某些方式进行协调,那么它们就会冒着覆盖和破坏彼此数据的风险。