STL容器的线程安全性
来源:互联网 发布:苹果mac怎么返回上一层 编辑:程序博客网 时间:2024/06/16 18:35
《Effective C++》中关于这个问题的阐述
条款12:对STL容器线程安全性的期待现实一些
标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有其他进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是它将因实现而不同。
当然,多线程程序是很普遍的,所以大部分STL厂商努力使他们的实现在线程环境中可以正常工作。但是,即使他们做得很好,大部分负担仍在你肩上,而理解为什么会这样是很重要的。STL厂商只能为你做一些可以减少你多线程的痛苦的事情,你需要知道他们做了什么。
在STL容器(和大多数厂商的愿望)里对多线程支持的黄金规则已经由SGI定义,并且在它们的STL网站[21]上发布。大体上说,你能从实现里确定的最多是下列内容:
多个读取者是安全的。多线程可能同时读取一个容器的内容,这将正确地执行。当然,在读取时不能有任何写入者操作这个容器。
对不同容器的多个写入者是安全的。多线程可以同时写不同的容器。
就这些了,那么让我解释你可以期望的是什么,而不是你可以确定的。有些实现提供这些保证,但是有些不。
写多线程的代码很难,很多程序员希望STL实现是完全线程安全的。如果是那样,程序员可以不再需要自己做并行控制。毫无疑问这将带来很多方便,但这也非常难实现。一个库可能试图以下列方式实现这样完全线程安全的容器:
在每次调用容器的成员函数期间都要锁定该容器。
在每个容器返回的迭代器(例如通过调用begin或end)的生存期之内都要锁定该容器。
在每个在容器上调用的算法执行期间锁定该容器。(这事实上没有意义,因为,正如条款32所解释的,算法没有办法识别出它们正在操作的容器。不过,我们将在这里检验这个选项,因为它的教育意义在于看看为什么即使是可能的它也不能工作。)
- STL容器的线程安全性
- 对STL容器线程安全性的期待现实一些
- 对STL容器线程安全性的期待现实一些
- 对STL容器线程安全性的期待现实一些
- 对STL容器线程安全性的期待现实一些
- STL的线程安全性
- 《Effective STL》读书笔记六:Item 12:对 STL容器的线程安全性抱有现实的期望
- Effective STL 第12条:切勿对STL容器的线程安全性有不切实际的依赖
- effective stl 第12条: 切勿对STL容器的线程安全性有不切实际的依赖
- C++ STL的线程安全性
- Effective STL 12 STL容器线程安全性考虑
- 条款12:对STL容器线程安全性的期待现实一些
- STL 线程安全性
- STL 线程安全性
- STL容器的线程安全?
- STL中线程安全的容器分析
- 关于STL容器的线程安全特性
- STL容器不是线程安全的
- 全球对冲基金精英榜【转载】
- 8.跨阻放大器TIA的阻抗:无穷大还是零? 究竟是什么?
- 时间序列分析中的ARMA,ARIMA,ARC…
- 神经网络相关知识和算法之(一)【…
- 时间序列分析的一般框架【整理】
- STL容器的线程安全性
- 王亚伟的投资理念
- 几种常见的固定收益套利策略…
- 研究员常用资源网址汇总&nbs…
- SQL Server 2008 清空删除日志文件
- 金融建模的未来z
- Linux学习笔记
- eclipse中maven插件详解
- 基金公司算法交易系统架构