在多线程锁定免费应用程序中具有多个迭代器的一个向量

时间:2014-04-18 13:27:48

标签: c++ multithreading vector stl lock-free

我在c ++应用程序中具有以下功能:

  1. 有一个固定长度的预分配std :: vector
  2. 第一个线程通过向量进行查找(只查找元素,匹配某些模式)
  3. 第二个帖子有时会更新向量的元素(只是更新,它不会删除元素)
  4. 第3个帖子也更新了向量元素(条件,当它与第2个帖子重叠时绝对排除
  5. 每个线程使用自己的迭代器来迭代向量元素。这意味着,一个迭代器只能由一个线程移动。

    问题是:这是否是线程安全的,同时使用多个线程迭代std :: vector,转而通过专用迭代器(每个脚本为此目的使用自己的迭代器)。

    我害怕的是,在STL深处,可能会导致一些故障(也许我是偏执狂)。我测试了这种方法,看起来很有效,但是想从专家那里得到一些反馈。

1 个答案:

答案 0 :(得分:2)

STL不是MT安全的。请查看Introductory-STL-tutorial - 特别是“多线程问题”一章。在您的情况下,线程2和3可以竞争相同的向量元素 - 因此您需要在每个元素中使用互斥锁。