STLPort和SGI STL之间的差异

时间:2010-04-24 16:03:41

标签: c++ stl

最近,在使用VC6时,我被以下问题STL std::string class causes crashes and memory corruption on multi-processor machines嗡嗡作响。

我计划使用替代的STL库而不是VC6提供的库。

我遇到了两个图书馆:STLPortSGI STL

我想知道2.我应该使用哪一个?哪一个能够保证线程安全?

感谢。

3 个答案:

答案 0 :(得分:4)

只是建议的提示。
当我们从VC6标准转移到STLPort stl时,我注意到的主要区别是集合的erase方法。

在VC6 erase中返回下一个有效的迭代器 在STLPort中它根本就没有。

因此,对于这些情况,你必须写这样的东西:

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

    if ( cond )
        collection.erase(it);
}
祝你好运!

答案 1 :(得分:3)

这是STLPort和SGI STL关系背后的故事

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

答案 2 :(得分:0)

我对STLPort了解不多,但是看一下他们描述thread safety的页面,他们提供的不仅仅是SGI的实现。他们会将您转到SGI的页面。 STLPort似乎主要用于平台可移植性。

STL容器对于并发写入不安全,但可以由多个线程读取。如果您打算进行并发写入,则需要提供自己的互斥锁(例如boost提供的互斥锁)。

SGI网站有SGI thread safety policy的完整说明。

看来VC6附带了一个坏的库,它在写入时写入字符串的引用计数中存在错误。