是C std :: set线程安全吗?

我有一个关于std :: set的线程安全性的问题。

据我所知,我可以迭代一个集合和添加/擦除成员,并不会使迭代器无效。

但请考虑以下情况:

>线程’A’遍历一组shared_ptr< Type>
>线程’B’偶尔将项目添加到此集合。

我遇到了segfaults程序运行,我不知道为什么会发生这种情况。是否缺少线程安全的原因?

最佳答案
STL没有内置的线程支持,所以你必须扩展STL
代码与您自己的同步机制使用STL
多线程环境。

例如看这里:link text

因为set是一个容器类MSDN下面说的关于容器的线程安全性。

单个对象是从多个线程读取的线程安全。例如,给定对象A,可以安全地同时从线程1和线程2读取A.

如果一个线程正在写入单个对象,则在同一或其他线程上对该对象的所有读取和写入都必须受到保护。例如,给定对象A,如果线程1正在写入A,则必须防止线程2从A读取或向A写入。

即使另一个线程正在读取或写入同一类型的不同实例,也可以安全地读取和写入类型的一个实例。例如,对于相同类型的对象A和B,如果A正在线程1中写入,并且B正在线程2中读取,则它是安全的。

转载注明原文:是C std :: set线程安全吗? - 代码日志