QVector预先分配了访问线程安全性

QVector preallocated access thread safety

本文关键字:访问 线程 安全性 分配 QVector      更新时间:2023-10-16

Qt容器在由多个线程使用时是安全的只读容器。但是写访问呢?我可以调整QVector的大小并在不同的线程中使用operator[]进行写入吗?QVector的大小将保持不变,每个线程将在不同的内存位置写入(每个线程都有自己的索引),因此没有相同的内存同时访问。QVector将是一个全局变量。

Qt文档将QVector的成员函数定义为可重入函数,这意味着如果每个线程都有不同的QVector实例,那么从线程调用其方法是安全的。这意味着QVector不会像你打算使用的那样是线程安全的

如果你能保证你对QVector的写入不会改变它的长度,也不会重叠,你可能会发现你不会有问题。但是,如果你知道你将要对向量的不同区域进行写入,为什么不将向量拆分为子向量,并用线程处理每个子向量呢?这将允许您保证不会出现与线程相关的问题。工作完成后,可以将矢量替换为单个实体。