最近,在使用VC6时,我被以下问题STL std::string class causes crashes and memory corruption on multi-processor machines嗡嗡作响。
我计划使用替代的STL库而不是VC6提供的库。
我想知道2.我应该使用哪一个?哪一个能够保证线程安全?
感谢。
答案 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关系背后的故事
答案 2 :(得分:0)
我对STLPort了解不多,但是看一下他们描述thread safety的页面,他们提供的不仅仅是SGI的实现。他们会将您转到SGI的页面。 STLPort似乎主要用于平台可移植性。
STL容器对于并发写入不安全,但可以由多个线程读取。如果您打算进行并发写入,则需要提供自己的互斥锁(例如boost提供的互斥锁)。
SGI网站有SGI thread safety policy的完整说明。
看来VC6附带了一个坏的库,它在写入时写入字符串的引用计数中存在错误。