c++ - 线程安全 std::vector push_back 和 reserve

标签 c++ multithreading vector

我有一个应用程序,它不断地将 std::vector::push_back 元素放入 vector 中。因为它是一个实时系统,所以我不能让它在任何时候停止。不幸的是,当保留的内存用完时,push_back 自动内存分配确实会导致停顿(在我的测量中高达 800 毫秒)。

我已经通过第二个线程 来解决这个问题,该线程监视可用内存的时间并在必要时调用std::vector::reserve

My question is: is it safe to execute reserve and push_back concurrently?

(显然假设 push_back 不会重新分配内存)

谢谢!

最佳答案

它不是线程安全的,因为 vector 是连续的,如果它变大,那么您可能需要将 vector 的内容移动到内存中的不同位置。

正如 stefan 所建议的,您可以查看非阻塞队列或有一个 vector 列表(或 vector ),这样当您需要更多空间时,另一个线程可以为您保留一个新 vector ,同时不会阻塞原始 vector 查找。您只需要重新映射索引以在列表中查找正确的 vector 。

关于c++ - 线程安全 std::vector push_back 和 reserve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288762/

相关文章:

c++ - 试图理解 C++ 标准中的 [class.qual]/2

C++ 编译错误 : . 找不到文件

java - ThreadLocal成员什么时候初始化?

c++ - 常量数据存储在哪里?

java - Maven 测试按顺序运行(多线程测试),原因未知

java - 如果我的 CPU 中的每个内核一次只能处理一个线程,那么如何使用 16 个或更多线程这么多?

c++ - 用 int 和 Points 对 vector 进行排序

r - 当 R 中另一个向量为 TRUE 时,保留向量中的值

c++ - vector 和 []-运算符重载

c++ - 调试列表数组