Итак, у меня есть этот вектор векторов и передать указатель на каждый элемент вектора в поток, такой поток выполняет некоторые действия и в конце заменяет содержимое нового вектора исходным. Каждый поток может работать только с одним элементом вектора, и размер вектора не изменяется (без возврата, выталкивания и т. д.). Я думаю, что это потокобезопасно (также рассматриваю другие вопросы по SO), но, поскольку оно включает в себя вектор векторов, я хотел бы спросить ваше мнение, чтобы понять, может ли быть какой-либо недостаток.
Итак, окончательный вопрос: является ли следующий код потокобезопасным??
Код: Выделить всё
#include
#include
#include
void func(std::vector* vec_ptr)
{
std::vector other_vec;
other_vec.emplace_back(1);
other_vec.emplace_back(20);
vec_ptr->swap(other_vec);
}
int main()
{
std::vector vector;
vector.reserve(6);
for (int i = 0; i < 6; i++)
{
std::vector vec_loc;
vec_loc.emplace_back(1 + i);
vec_loc.emplace_back(2 + i);
vec_loc.emplace_back(3 + i);
vector.emplace_back(vec_loc);
}
std::vector threads;
for (int i = 0; i < 6; i++)
{
threads.push_back(std::thread(func, &vector[i]));
}
for (auto thread_iter = threads.begin(); thread_iter != threads.end(); thread_iter++)
{
thread_iter->join();
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... or-items-w