2014-11-14 55 views
0

这里是我的情况的简化版本:我需要一个指针向量上的互斥量吗?

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

操纵如果每个线程都有自己的向量没有竞争条件的空间不需要互斥。 – dtech 2014-11-14 20:00:06

回答

1

每个线程都附加不同的std::vector(在AppendToVector函数中),所以不需要锁定您的情况。如果你改变你的代码的方式不止一个线程访问相同的矢量,那么你将需要锁定。不要困惑,因为std::vectors要传递到AppendToVector是他们异体的主要std::list元素,它唯一要紧的是这里的线程与完全不同的(不共享)内存

相关问题