Конструктивная( надеюсь ) критика.
От: Иван Коростелёв ivank.hut.ru
Дата: 18.11.01 04:08
Оценка: 1 (1)
Вырезано из письма автору:

с STL всё же возможны траблы -- например если в одном потоке делаетсе итерирование по всем элементам std::list, а в другом какой-нить элемент удаляется...

то есть такой пример потенциально может вызвать проблеммы:

typedef std::list< std::string > sl;

GuardT< sl > some_list;

void thread1()
{
for( sl::iterator it = some_list->begin();
it != some_list->end();
++it )
{
// ...
}
}

void thread2()
{
while( ( sl::iterator it = some_list->begin() ) != some_list->end() )
some_list->erase( it );
}

А всё почему? Потому что итераторы возвращаются незащищённые. То есть существует вероятность что:

1) thread1 сделает sl::iterator it = some_list->begin();
2) произойдёт threadswitching
3) thread2 сделает первую итерацию цикла -- удалит первый элемент
4) когда очередь дойдёт до thread1 it будет указывать в никуда...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.