终于被我找到了
来源:互联网 发布:linux vi编辑器下载 编辑:程序博客网 时间:2024/03/29 15:40
一直在考虑VC6自带的STL和他自己的容器类是不是线程安全的,安全到我拿多个线程,这边写那边读,这边写那边写都可以不考虑会不会出现RACE CONDITION,我测了几把竟然都能得到正确的结果,郁闷~,终于发现了一篇文字如下:
在所有的主流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。
看来还完全是线程安全的,LOOK第三条,还是要你自己拿自己的同步对象来锁下~:),虽然我找不到可以证明的例子,但还是安全第一,要么自己写个LIST什么的,要么就好好锁一锁
- 终于被我找到了
- 哇塞!!!不同的播放器,终于被我找到了。
- 终于找到了,我想要的
- 终于找到了密码,所以我回来了
- 终于找到工作了!
- 终于找到工作了
- 终于找到工作了!
- 终于找到了
- 终于找到了
- 终于找到工作了
- 终于找到党组织了
- 终于找到了
- 终于找到组织了
- 终于找到老师了
- 终于找到组织了
- 前几天我的问题终于在网上找到方法了!
- 终于让我找到javascript的帮助网站了
- 毕业一年后,我终于找到了自己的发展方向
- Base-Jsp-15-应用程序设计原则
- Base-Jsp-16-监听器和过滤器
- 用有穷自动机解一道面试题
- Base-Jsp-17-JavaBeans
- Base-Jsp-18-自定义标记库
- 终于被我找到了
- java测试服务器的方法!
- 男人25岁前应懂的21个道理[男人必看
- 贺雄飞与黎鸣的演讲
- 一天就搞定一个问题,哎
- [转]图片处理部分函数
- MSN尾巴病毒手工清除方法
- Why you shouldn't run as admin...
- 小谈Ping在网络测试中的作用