STL自身对多线程的支持非常有限。对于STL,你能期望的是:

  1. 多个线程读是安全的。
  2. 多个线程对不同的容器做写入操作时安全的。

在需要修改STL容器或这调用STL算法时需要自己加锁。
为了实现异常安全,最好不要手动加锁解锁,多使用RAII。
例如多使用std::lock_guard(),std::lock_guard是RAII模板类的简单实现,功能简单。
std::lock_guard 在构造函数中进行加锁,析构函数中进行解锁,即使遭遇异常,依旧可以保证锁被释放。

C++保证,如果有异常被抛出,局部对象会被析构。

为了缩小RAII类对象的作用域,可以通过使用“{ }”,使对象提前析构、释放锁、减小代码被锁区间。

   std::vector<int> datas;std::mutex oneMutex;...{std::lock_guard(one);... // 操作datas}

6.切勿对STL容器的线程安全性有不切实际的依赖相关推荐

  1. STL容器的线程安全

    STL容器是线程不安全的. 线程安全的情况 多个读取者是安全的.多线程可能同时读取一个容器的内容,这将正确地执行.当然,在读取时不能 有任何写入者操作这个容器. 对不同容器的多个写入者是安全的.多线程 ...

  2. UNIX(多线程):24---哪些STL容器是线程安全的

    在日常C++开发,少不了和STL,多线程打交道,那么在多线程下,哪些容器时线程安全的,那些不是? 好,这里就举一个简单的例子,我们先看看vector容器,相信你能看出一些问题: #include &l ...

  3. STL容器是否是线程安全的

    转载http://blog.csdn.net/zdl1016/article/details/5941330 STL的线程安全. 说一些关于stl容器的线程安全相关的话题. 一般说来,stl对于多线程 ...

  4. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  5. c++ file* 句柄泄漏_C++核心准则?讨论:持有没有被句柄管理的资源时切勿抛出异常...

    Discussion: Never throw while holding a resource not owned by a handle 讨论:持有没有被句柄管理的资源时切勿抛出异常 Reason ...

  6. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  7. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...

  8. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...

  9. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请指明出于breakso ...

最新文章

  1. 面试官:说说RabbitMQ 消费端限流、TTL、死信队列
  2. 有道算法题--排序之桶排序实现求排序后相邻最大差值问题
  3. 互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  4. 7.30 KubeCon2020 | 今天下午5:40 近几年最火爆的技术峰会之分享主题.NET开发者与Kuberentes...
  5. 中国速度之二神山建设(4):全能运维,召之即来,来之即战 | IDCF DevOps案例研究...
  6. Infinite Fraction Path UVALive - 8207
  7. createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查
  8. java基础教程知识点,[Java教程]js基础知识点总结
  9. IOT(6)---MQTT和CoAP
  10. 黄聪:mysql 存在该记录则更新,不存在则插入记录的sql
  11. Cinnamon 任务栏网速
  12. 计算机网络-什么是计算机网络?
  13. android 应用市场图尺寸,【干货】最新App应用市场截图尺寸大全
  14. establish connection
  15. 八皇后算法带给我们的启示吧
  16. 【休闲益智】【HTML】看字说颜色
  17. 绎维软件F-One获得B轮融资,华创资本领投,齐银基金跟投...
  18. win10 vs2017 community 新版 systemc
  19. OpenWrt系列教程汇总
  20. 【print的格式化输出】

热门文章

  1. 1.常用字符对象方法
  2. 进程上下文与中断上下文
  3. 实现文件上传进度条功能
  4. 有关linux下redis overcommit_memory的问题
  5. sql_mysql注入基础篇
  6. C# 基础知识 (一).概念与思想篇
  7. RxSwift之UI控件UISwitch与UISegmentedControl扩展的使用
  8. HarmonyOS之常用布局AdaptiveBoxLayout的使用
  9. 1.1 什么是Hive
  10. 《每日一题》290. Word Pattern