This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

STL, thread-safety and iterators


Hi,

Given that removing/inserting elements from a map/slist/whatever does
not invalidate iterators to list elements, it is safe to use the
element that the iterator "points" to ?

For example:

slist<struct foo> list;

thread A:

lock();
list.insert_after(list.begin(), elem);
unlock();

thread B:

lock();
const_iterator it = slist.begin();
const struct foo& elem = *it;
unlock();

// operations on elem are atomic

while (bar) { foo.i++ | *it.i++ }

lock();
slist.erase(it);
unlock();


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]