我有一个图形对象,我正在像这样传递到线程中:
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/