
一些与stl容器的线程安全有关的主题.

一般而言,stl对多线程的支持仅限于以下两点: (看起来像在“有效STL”中所描述的一样)
1. 多位读者是安全的. 也就是说,多个线程可以同时读取容器的内容.

也就是说,此时,多个线程调用了不涉及写入的容器接口,例如查找,开始,结束等.
2. 对于在不同容器中的多个编写器来说是安全的. 也就是说,多个线程同时写入不同的容器.

但是,当同一容器中有线程写入和线程读取时,如何确保正确性?
它需要由程序员控制. 例如,当线程A读取容器中的项目时,线程B正在删除该项目. 这可能会导致无法预测的错误.

通常的解决方案是使用成本较低的关键部分(CRITICAL_SECTION)进行同步. 按照以下方式进行同步,基本上可以实现线程安全的容器(也就是说禁止跨线程调用安全,在执行写操作的情况下仍然可以保持安全).
1. 每次调用容器的成员函数时禁止跨线程调用安全,都需要将其锁定.
2. 每个容器返回的迭代器的生存期都需要锁定.
3. 在调用算法执行期间,每个容器都需要锁定.
与Ronaldinho有关task_server的多线程安全通信:
是这种情况. 当您调用地图的任何接口(例如end(),begin(),find()等)时,它可能会返回一个迭代器. 如果另一个线程正在修改该映射,则迭代器It变得无效,然后使用此迭代器行为可能会导致问题. 或在find()函数内部,您将访问映射内的红黑树的数据结构,此红黑树可能会被其他线程调整. (例如在地图中插入不存在的记录). 因此,这很危险.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-246731-1.html
反正中国门口天天被侦查