Re[2]: STL-вский vector и снихронизация потоков
От: RealBobEx  
Дата: 04.08.05 12:08
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, RealBobEx, Вы писали:


RB>Векто съезжает из-за того, что при добавлении айтемов в вектор тот может производит реаллокацию своего буфера. При этом полученные ранее итераторы становятся невалидными.


RB>У тебя один поток добавляет айтем, другой — использует итератор, который после добавления становится невалидным.


Хммм... В таком случае должно помогать простое обновление значений итераторов, например так:
    singleLock.Lock();
    I = m_Vector.begin();
    End = m_Vector.end();
    singleLock.Unlock();

    long i = 0;
    for(I; I < End; )
    {
        singleLock.Lock();
        //Используем I, т.к. теперь он валидный.
        i++;
        I++;
        End = m_Vector.end();
        singleLock.Unlock();
    }

Однако это помогает только не выйти за верхнюю границу, но правильные значения все равно не получаются.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.