2014-11-14 54 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元素,它唯一要緊的是這裏的線程與完全不同的(不共享)內存

相關問題