我是否需要指针向量上的互斥量?

时间:2014-11-14 19:54:15

标签: multithreading c++11 mutex

以下是我的情况的简化版本:

void AppendToVector(std::vector<int>* my_vector) {
  for (int i = 0; i < 100; i++) {
    my_vector->push_back(i);
  }
}

void CreateVectors(const int num_threads) {
  std::vector<std::vector<int>* > my_vector_of_pointers(10);
  ThreadPool pool(num_threads);
  for (for int i = 0; i < 10; i++) {
    my_vector_of_pointers[i] = new std::vector<int>();
    pool.AddTask(AppendToVector,
                 &my_vector_of_pointers[i]);
  }
}

我的问题是,在使用多个线程运行时,是否需要在AppendToVector中放置一个互斥锁?我的直觉告诉我,我没有必要,因为两个线程不可能访问相同的数据,但我并不完全自信。

1 个答案:

答案 0 :(得分:1)

每个线程都附加了不同的std::vector(在AppendToVector函数内),所以不需要锁定你的情况。如果您以多个线程访问相同向量的方式更改代码,则需要锁定。不要感到困惑,因为你传递给std::vectors的{​​{1}}是主AppendToVector的自我元素,重要的是这里的线程操作完全不同(不共享)记忆