Разница между STLPort и SGI STL - PullRequest
4 голосов
/ 24 апреля 2010

Недавно меня удивила следующая проблема STL std :: string class вызывает сбои и повреждение памяти на многопроцессорных компьютерах при использовании VC6.

Я планирую использовать альтернативные библиотеки STL вместо библиотеки VC6.

Мне попалось 2 библиотеки: STLPort и SGI STL

Мне было интересно, в чем разница между 2. Какой мне следует использовать? Какой из них способен гарантировать безопасность ниток?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 24 апреля 2010

Просто совет.
Когда мы сделали переход от стандарта VC6 к STLPort stl, я заметил, что основным отличием стал метод erase для коллекций.

В VC6 erase возвращает следующий действительный итератор.
В STLPort это просто не так.

Так что для этих случаев вам нужно написать что-то вроде этого:

for(iterator it = begin; it != end; )
{
    iterator next = it;
    ++next;

    if ( cond )
        collection.erase(it);
}

Удачи!

3 голосов
/ 28 апреля 2010

Вот история отношений STLPort и SGI STL

http://stlport.sourceforge.net/History.shtml

0 голосов
/ 24 апреля 2010

Я не знаю много о STLPort, но, глядя на их страницу, описывающую безопасность потоков , они не предоставляют ничего, кроме реализации SGI. Они направляют вас на страницу SGI. STLPort в основном полезен для переносимости платформы.

Контейнеры STL небезопасны для одновременной записи, но могут быть прочитаны несколькими потоками. Если вы намереваетесь выполнять одновременную запись, вам потребуется предоставить собственный мьютекс (например, тот, который предоставляется boost ).

На сайте SGI есть полное объяснение политики безопасности SGI .

Похоже, что VC6 был поставлен с плохой библиотекой, в которой была ошибка в подсчете ссылок строк копирования при записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...