我有一个应用程序,它不断地将 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/