多线程无锁应用程序中具有多个迭代器的一个向量



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

  1. 有一个固定长度的预分配std::向量
  2. 第一个线程通过向量进行查找(仅查找元素,匹配某些模式)
  3. 第二个线程有时会更新向量的元素(只是更新,不会删除元素)
  4. 第三个线程也会更新矢量元素(当它与第二个线程重叠时,条件是绝对排除

每个线程都使用自己的迭代器来遍历向量元素。这意味着,一个迭代器只能由一个线程移动。

问题是:这个线程安全吗?使用多个线程同时迭代std::向量,然后通过专用迭代器(每个线程为此使用自己的迭代器)。

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

STL不是MT安全的。请看一下STL入门教程,特别是"多线程问题"一章。在您的情况下,线程2和3可以竞争同一个向量元素,因此您需要在每个元素中都有一个互斥对象。

相关内容

  • 没有找到相关文章

最新更新