gpt4 book ai didi

c++ - 多线程无锁应用程序中具有多个迭代器的一个 vector

转载 作者:行者123 更新时间:2023-11-30 04:05:43 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于c++ - 多线程无锁应用程序中具有多个迭代器的一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com