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。仍然我有这个问题。您可以提出建议并解决。这将对我非常有帮助。
一旦有人添加或删除向量的成员,你的迭代器就会变得无效。
特别是如果添加元素,可能必须重新分配内部缓冲区。但如果对象被删除,end() 也会移动,您可能会错过它。
您必须有一个锁来在迭代向量时保护它。