QVector预先分配了访问线程安全性
QVector preallocated access thread safety
Qt容器在由多个线程使用时是安全的只读容器。但是写访问呢?我可以调整QVector
的大小并在不同的线程中使用operator[]
进行写入吗?QVector
的大小将保持不变,每个线程将在不同的内存位置写入(每个线程都有自己的索引),因此没有相同的内存同时访问。QVector
将是一个全局变量。
Qt文档将QVector的成员函数定义为可重入函数,这意味着如果每个线程都有不同的QVector实例,那么从线程调用其方法是安全的。这意味着QVector不会像你打算使用的那样是线程安全的
如果你能保证你对QVector的写入不会改变它的长度,也不会重叠,你可能会发现你不会有问题。但是,如果你知道你将要对向量的不同区域进行写入,为什么不将向量拆分为子向量,并用线程处理每个子向量呢?这将允许您保证不会出现与线程相关的问题。工作完成后,可以将矢量替换为单个实体。
相关文章:
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 线程时访问静态映射时出现隔离错误
- 是否需要 mutex() 来安全地同时访问具有 2 个线程的数组的不同元素?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 从子线程访问指针
- 对C++中的队列进行多线程访问
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- cuda:多个线程访问同一个全局变量
- 如何进行线程安全shared_ptr修改和访问?
- 如果迭代器的迭代器永远不会无效,则是STD :: MAP访问线程安全
- 如何在不将类数据成员作为参数传递的情况下访问线程中的类数据成员
- 在 C++ 中包含和访问线程全局变量
- QVector预先分配了访问线程安全性
- 使对unsigned char的访问线程安全(原子)
- 在 OpenMP 中访问线程的专用内存
- 访问线程中的vector.front()会导致运行时错误
- 访问线程(MFC)中的主对话框变量
- 从主循环windows访问线程变量