首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同的线程中调用向量析构函数或清除

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

Stack Overflow用户
提问于 2017-08-05 17:28:40
回答 1查看 257关注 0票数 2

我有一个庞大的unique_ptr矢量。

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

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

当我在互联网上看的时候,我没有看到任何人这样谈论优化。

我的优化有缺陷吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-05 17:55:02

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

代码语言:javascript
复制
struct X
{
    // some data here
};

using DataStorage = std::vector<std::unique_ptr<X>>;

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

代码语言:javascript
复制
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(),这样主线程在执行清除操作时不会挂起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45520354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档