如何在跨平台下通过Qt中的多线程写入同一文件的不同区域
How to write to different region of same file by multi-thread in Qt under cross-platform?
我需要多线程的跨平台解决方案来同时写入同一个文件,至少是Windows和Mac OS X。
文件有点大。可能是几 GB 或几百 MB。所以MMF不适合。
QFile 是跨平台重叠。我已经搜索了 QFile 文档,没有共享写入选项。
在Windows下,这可以通过CreateFile使用FILE_SHARE_WRITE选项来完成。Mac OS X呢?
Qt是否支持这一点,或者我应该自己做封装?如何在Mac OS X下执行此操作?
您可以将
QFile
与QReadWriteLock
(文档)一起使用。
在 Mac OS X 上,多个进程或线程打开文件并在其中写入没有障碍,除非这些进程或线程专门选择加入协作锁定方案。这种选择加入的合作锁定方案称为"咨询锁定"。例如,flock()
用于锁定整个文件,fcntl() 用于字节范围锁定。
根据QFile
的实现方式,它可能允许按原样进行多线程编写。它必须采取特别步骤来禁止它。
当然,如果线程或进程没有通过某些方式进行协调,那么它们就会冒着覆盖和破坏彼此数据的风险。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- sigwait() 在多线程程序中不起作用
- 多线程程序中出现意外的内存泄漏
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 多线程比没有线程C++慢
- 具有 C++11 多线程的特征库
- 通过安装信号处理程序关闭多线程应用程序
- 成员变量在多线程 C++ 时自行更改
- 如何在跨平台下通过Qt中的多线程写入同一文件的不同区域