【发布时间】:2010-12-03 14:56:56
【问题描述】:
假设我有一个包含 N 个元素的向量,但该向量的最多 n 个元素具有有意义的数据。一个更新线程更新第 n 个或第 n+1 个元素(然后设置 n = n+1),还检查 n 是否太接近 N 并在必要时调用 vector::resize(N+M)。更新后,线程调用多个子线程最多读取第n个数据并进行一些计算。
保证子线程永远不会更改或删除数据,(实际上没有任何数据被删除)并且更新程序在完成更新后立即调用子线程。
到目前为止还没有出现问题,但是我想问一下,在将vector重新分配到更大的内存块的过程中是否会出现问题,如果上次更新留下了一些子工作线程。
或者在这种多线程情况下使用向量是否安全,因为它不是线程安全的?
编辑: 由于只有在更新程序调用 vector::resize(N+M,0) 时才会发生插入,所以我的问题有什么可能的解决方案吗?由于 STL 向量的出色性能,我不愿意用可锁定的向量替换它,或者在这种情况下是否有任何高性能、已知和无锁的向量?
【问题讨论】:
标签: c++ multithreading stl vector thread-safety