Ich durchlaufe einen STL-Vektor und lese Werte daraus. Es gibt einen anderen Thread, der Änderungen an diesem Vektor vornehmen kann. Wenn der andere Thread ein Element in den Vektor einfügt oder entfernt, wird der Iterator ungültig. Es werden keine Sperren verwendet. Macht es meine Wahl, auf den Container durch Indizes zuzugreifen (Ansatz 1) anstelle von Iteratoren (Ansatz 2), threadsicher? Wie steht es um die Leistung?
struct A{int i; int j;};
Ansatz 1:
size_t s = v.size();//v enthält Zeiger auf Objekte vom Typ A
for(size_t i = 0; i < s; ++i)
{
A* ptr = v[i];
ptr->i++;
}
Ansatz 2:
std::vector::iterator begin = v.begin();
std::vector::iterator end = v.end();
for(std::vector::iterator it = begin; it != end; ++it)
{
A* ptr = *it;
ptr->i++:
}