STL不是MT安全的。请看一下STL入门教程,特别是"多线程问题"一章。在您的情况下,线程2和3可以竞争同一个向量元素,因此您需要在每个元素中都有一个互斥对象。
我在c++应用程序中有以下功能:
- 有一个固定长度的预分配std::向量
- 第一个线程通过向量进行查找(仅查找元素,匹配某些模式)
- 第二个线程有时会更新向量的元素(只是更新,不会删除元素)
- 第三个线程也会更新矢量元素(当它与第二个线程重叠时,条件是绝对排除)
每个线程都使用自己的迭代器来遍历向量元素。这意味着,一个迭代器只能由一个线程移动。
问题是:这个线程安全吗?使用多个线程同时迭代std::向量,然后通过专用迭代器(每个线程为此使用自己的迭代器)。
我害怕的是,在STL的深处,它可能会导致一些故障(也许我是偏执狂)。我测试了这种方法,它似乎有效,但我想从专家那里得到一些反馈。