Vector迭代器的多个线程

Pra*_*bhu 5 c++ multithreading stdvector

我已将向量声明为

typedef std :: vector <unsigned int> SampleList;

并在类中声明了Samplist类型的成员变量。

我正在从具有多个线程的另一个类访问此向量。

我正在添加,删除,从不同线程读取值值。我经常像下面这样阅读此值。

SampleList* listSample;
listSample= ptr->GetList();
while(true)
{   
    SampleList::iterator itrSample;
    itrSample = listSample->begin();

    unsigned int nId = 0;


    for ( ; itrSample < listRoundRobinSensor->end(); ++itrSample )
    {           
         nId =(unsigned int) *itrSample ;
    }

}
Run Code Online (Sandbox Code Playgroud)

对于itrSample值变成垃圾值一样4261281277

我尝试用来保护此列表critical secion。仍然我有这个问题。您可以提出建议并解决。这将对我非常有帮助。

Bo *_*son 4

一旦有人添加或删除向量的成员,你的迭代器就会变得无效。

特别是如果添加元素,可能必须重新分配内部缓冲区。但如果对象被删除,end() 也会移动,您可能会错过它。

您必须有一个锁来在迭代向量时保护它。