0

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

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

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

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

Qt 支持这个还是我应该自己封装?如何在 Mac OS X 下做到这一点?

4

2 回答 2

0

您可以使用QFileQReadWriteLock文档

于 2012-04-11T08:38:55.433 回答
0

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

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

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

于 2012-04-11T10:31:51.943 回答