【发布时间】:2018-01-19 17:48:23
【问题描述】:
我有一个大向量,我想更新该向量中的一些数据(不插入/删除,而是用指定索引上的另一个元素替换一个元素)。
我认为在 2 个或更多不同的线程上执行工作非常聪明,因此可以提高速度。而且由于在这种情况下实际上不需要同步,因此由于索引不同,这应该非常快。
不幸的是,我的代码崩溃了,要么声明:EXC_BAD_ACCESS,要么“未分配被释放的指针”。
伪代码:
// I have an entries_ vector with data of type DataT
std::vector<std::thread> workers(NUMBER_OF_PARALLEL_CHUNKS);
unsigned long tuplesPerChunk = entries_.size() / NUMBER_OF_PARALLEL_CHUNKS;
for (int j = 0; j < NUMBER_OF_PARALLEL_CHUNKS; ++j) {
unsigned long offset = tuplesPerChunk * j;
workers.emplace_back(std::thread([&offset, &tuplesPerChunk, this](){
for (int i = 0; i < tuplesPerChunk; ++i) {
unsigned long offsetIndex = offset + i;
entries_[offsetIndex] = createNewDataForSomeParticularReason();
}
}));
}
for (auto &worker : workers) {
if (worker.joinable()) worker.join();
}
【问题讨论】:
-
没有更多信息很难回答这个问题。错误发生在代码的什么地方?你试图找出它发生的原因是什么?只有一个线程会发生这种情况吗?只有一个条目的数组?等等。你能让代码更简单,但仍然显示同样的问题吗? (这样做,您可能会弄清楚出了什么问题。)
标签: c++ vector concurrency mutex