【发布时间】:2020-06-28 05:12:39
【问题描述】:
多个线程处理数据,最后它们都在 RESULT 向量中插入/追加结果。
我想确保一次只有一个线程在 RESULT 向量中插入元素。
为此,我使用了 mutex 和 lock_guard(),但它们有时会给出无效访问错误,有时它们不会...
这是我的同步代码
void insert_output() {
mutex m;
lock_guard<mutex> lockGuard(m);
Resources::results.insert(Resources::results.begin(), output.begin(), output.end());
}
我是不是做错了什么...
还有什么更好的方法来同步这个过程?
【问题讨论】:
-
另外,附注:在
std::vectoralways 的开头 插入需要复制/移动整个向量。这将很快花费很长时间。您应该只在std::vector的end 处插入。如果需要在开头插入,请使用std::deque或std::list或在末尾反向插入,然后将向量反向。
标签: c++ multithreading c++11 c++14 c++17