在不同的线程中调用向量析构函数或清除



我有一个巨大的unique_ptr向量。

当我需要执行 clear(( 或调用析构函数时,需要 4-5 秒。

加速它的一种理论上的方法是创建 temp 向量,将其与我工作的巨大向量交换,然后启动一个线程并在 temp 向量上调用 clear。

在互联网上查看时,我没有看到有人像这样谈论优化。

我的优化中是否存在缺陷?

我想你的想法应该可行。例如,如果您有一些名为X的数据std::vector

struct X
{
// some data here
};
using DataStorage = std::vector<std::unique_ptr<X>>;

您可以使用std::async移动DataStorage对象并异步调用此对象上的clear()

DataStorage data;
// data usage
auto clear_task = std::async(std::launch::async,
&DataStorage::clear, std::move(data));
// do some stuff here; data object is not used anymore
clear_task.wait();

这里没有不必要的复制:您只需移动data并指定要在单独的线程中调用clear(),以便在执行清除操作时主线程不会挂起。

最新更新