我有一个应用程序,它持续 std :: vector :: push_back 元素到一个向量中。由于它是一个实时系统,我无法在任何时候停止。不幸的是,当保留的内存耗尽时,push_back自动内存分配确实会导致停顿(在我的测量中最多800毫秒)。
我通过一个第二个线程来监视问题,它监视可用内存并在必要时调用 std :: vector :: reserve 。
我的问题是:同时执行reserve和push_back是否安全?
(显然假设push_back不会重新分配内存)
谢谢!
答案 0 :(得分:2)
它不是线程安全的,因为向量是连续的,如果它变大,那么你可能需要将向量的内容移动到内存中的不同位置。
正如stefan建议的那样,你可以查看非阻塞队列或者有一个向量列表(或向量),这样当你需要更多空间时,另一个线程可以为你保留一个新的向量而不会阻塞原始向量查找。您只需要重新映射索引以查找列表中的正确向量。
答案 1 :(得分:-1)
没有
线程安全概念仅存在于C ++ 11中。它是根据const
定义的。在C ++ 11中,标准库const
现在意味着thread-safe
。这两种方法都不是const
,所以不,它不是线程安全的。