STL(VC6) Good Q&A(五):Are Containers Thread Safe?
2008-01-03 20:47
369 查看
VC.STL Newsgroup Good Questions(五)
Article last modified on 2002-5-30----------------------------------------------------------------The information in this article applies to:- Microsoft Visual C++, 32-bit Editions, version 6.0, SP5----------------------------------------------------------------Are Containers Thread Safe?
Question:
STL的containers是否具有线程安全性?或者说,多线程访问数据时,我是否需要提供保护?我觉得应该具有线程安全性,但我想确定一下。 |
Answer:
在所有的主流STL实现方案中,几乎所有的容器都是线程安全的:1).一个线程读写一个实例时,另一个线程可以读写另一个实例。2).多个线程可以在同时读同一个container。3).多个线程写同一个container时,你应该负责安排互斥性操作。 一个特例是std::string。在一些STL的实现厂商(包括MS VC6),使用的是带引用计数的string! 这就意味着可能有两个std::string的实例共享着同一块底层数据。这使得前面说的第一个规则被打破! 看一下这样的代码:string s1= “abcd”;string s2 = s1; 在引用计数的实现版本中,这几句话意味着:先分配一块内存给”abcd”,一个引用计数的数;s1和s2都将引用这块内存,引用计数将为2。引用计数的本意是在把strings传出functions时优化copy行为。但是这种算法并不是线程安全的!如果你将s2传给另一个线程,那么就很可能有两个线程企图修改这同一块内存!那将会有不可预料的行为发生。理论上,你可以在两个线程之间增加线程同步,但是这个同步的代价将会大于你从引用计数中获得的好处!这就是为什么主流的STL厂商不再使用引用计数的原因。比如,Dinkumware STL shipped with VC7。 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12677
相关文章推荐
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- STL(VC6) Good Q&A(五):Are Containers Thread Safe?
- PHP VC9和VC6以及Thread Safe和Non…
- PHP版本VC6和VC9、Non Thread Safe和Thread Safe的区别
- Question 6: Which of the following are container adapters in the STL (Standard Template Library) in C++?
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- 【转】PHP版本VC6和VC9、Non Thread Safe和Thread Safe的区别
- 解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
- Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]"
- 官方下载php服务器软件VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
- gmtime()/localtime() are not thread-safe
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
- PHP版本VC6和VC9、Non Thread Safe和Thread Safe的区别
- PHP下载时VC9和VC6以及Thread Safe和Non Thread Safe版本选择