6.切勿对STL容器的线程安全性有不切实际的依赖
STL自身对多线程的支持非常有限。对于STL,你能期望的是:
- 多个线程读是安全的。
- 多个线程对不同的容器做写入操作时安全的。
在需要修改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容器的线程安全性有不切实际的依赖相关推荐
- STL容器的线程安全
STL容器是线程不安全的. 线程安全的情况 多个读取者是安全的.多线程可能同时读取一个容器的内容,这将正确地执行.当然,在读取时不能 有任何写入者操作这个容器. 对不同容器的多个写入者是安全的.多线程 ...
- UNIX(多线程):24---哪些STL容器是线程安全的
在日常C++开发,少不了和STL,多线程打交道,那么在多线程下,哪些容器时线程安全的,那些不是? 好,这里就举一个简单的例子,我们先看看vector容器,相信你能看出一些问题: #include &l ...
- STL容器是否是线程安全的
转载http://blog.csdn.net/zdl1016/article/details/5941330 STL的线程安全. 说一些关于stl容器的线程安全相关的话题. 一般说来,stl对于多线程 ...
- c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- c++ file* 句柄泄漏_C++核心准则?讨论:持有没有被句柄管理的资源时切勿抛出异常...
Discussion: Never throw while holding a resource not owned by a handle 讨论:持有没有被句柄管理的资源时切勿抛出异常 Reason ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找
相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请指明出于breakso ...
最新文章
- 面试官:说说RabbitMQ 消费端限流、TTL、死信队列
- 有道算法题--排序之桶排序实现求排序后相邻最大差值问题
- 互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
- 7.30 KubeCon2020 | 今天下午5:40 近几年最火爆的技术峰会之分享主题.NET开发者与Kuberentes...
- 中国速度之二神山建设(4):全能运维,召之即来,来之即战 | IDCF DevOps案例研究...
- Infinite Fraction Path UVALive - 8207
- createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查
- java基础教程知识点,[Java教程]js基础知识点总结
- IOT(6)---MQTT和CoAP
- 黄聪:mysql 存在该记录则更新,不存在则插入记录的sql
- Cinnamon 任务栏网速
- 计算机网络-什么是计算机网络?
- android 应用市场图尺寸,【干货】最新App应用市场截图尺寸大全
- establish connection
- 八皇后算法带给我们的启示吧
- 【休闲益智】【HTML】看字说颜色
- 绎维软件F-One获得B轮融资,华创资本领投,齐银基金跟投...
- win10 vs2017 community 新版 systemc
- OpenWrt系列教程汇总
- 【print的格式化输出】