c++ - 传递给线程后保持引用存活

标签 c++ multithreading c++11

我有一个图形对象,我正在像这样传递到线程中:

void MyClass::execute_subqueries(Graph& g, vector<query>&& queries) {
  for (size_t i = 0; i < queries.size(); i++) {
    threads.emplace_back(thread(my_thread, ref(g), queries[i]));
  }
}

我想制作图形对象 g 的拷贝,因为我将在我的线程运行时对其进行更改。我只想制作一个拷贝并将引用传递给我在 for 循环中启动的所有线程。我不想为每个线程制作一个拷贝,因为图形很大而且克隆它的成本很高。

问题是我不知道如何让我的 Graph 对象保持事件状态。我想在我传入引用后,Graph 对象被释放,我的线程没有产生我期望的结果。执行此操作的好方法是什么?

最佳答案

你的标志告诉我你使用 c++11,那你为什么不使用

std::vector< std::shared_ptr<Graph> > graphs;

并将共享指针传递给线程?只要它们被使用,它们就会让你的图表保持活力,并在之后负责清理......

关于c++ - 传递给线程后保持引用存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764864/

相关文章:

c++ - 忽略错误 LNK2001(未解析的外部符号)

c++ - 将对象快照保存到文件的最佳方法

c++ - std::thread,在线程中引发异常会导致 Visual C++ 中出现异常中止错误

线程终止时的 Java ExecutorService 回调

python - mysql 连接与 python 中的并发.futures 不能很好地配合

c# - 带回调的线程示例不起作用。

c++11 - 如果智能指针指向的对象自杀会发生什么?

c++ - 为什么可以修改函数内声明的静态 const 变量?

c++ - 如何将 lambda 传递给 lambda?

c++ - 模板元编程静态成员函数无法获取类的 const static 值