好久没写多线程了,工作好几年也没怎么大规模的写过多线程,都是成形的架构里写业务逻辑。偶尔自己写了下,各种踩坑。。。

1.string 不是线程安全的

一个特例是std::string。在一些STL的实现厂商(包括MS VC6),使用的是带引用计数的string! 这就意味着可能有两个std::string的实例共享着同一块底层数据。这使得前面说的第一个规则被打破! 

看一下这样的代码: 
string s1= “abcd”; 
string s2 = s1; 

在引用计数的实现版本中,这几句话意味着:先分配一块内存给”abcd”,一个引用计数的数;s1和s2都将引用这块内存,引用计数将为2。引用计数的本意是在把strings传出functions时优化copy行为。 

但是这种算法并不是线程安全的! 

如果你将s2传给另一个线程,那么就很可能有两个线程企图修改这同一块内存!那将会有不可预料的行为发生。 

结论:不要多个线程使用 常字符串 string s1= “abcd”; 这种编译期处理的值? 说不明白。。。

更多相关文章

  1. Linux多线程——异步
  2. [Linux OS] Ubuntu 16.04 上实时显示上下行网速、CPU及内存使用
  3. [置顶] 每天进步一点点——Linux中的线程局部存储(一)
  4. 在Linux中查找线程的CPU使用情况
  5. 使用/proc/meminfo文件查看内存状态信息
  6. 线程同步-生产者消费者问题
  7. Linux多线程总结
  8. arm-linux学习笔记3-linux内存管理与文件操作
  9. CENTOS 修改MYSQL文件到内存盘

随机推荐

  1. 最后一天送点福利,为您2019添砖加瓦~
  2. 月入三万,我能少了你一个鸡蛋?
  3. 深入浅出 JavaScript 中的For循环之详解
  4. 004. 寻找两个正序数组的中位数 | Leetco
  5. 自学编程的八大误区!克服它!
  6. webpack4配置详解之慢嚼细咽
  7. “狗屁不通文章生成器”项目登顶GitHub热
  8. 005. 最长回文子串 | Leetcode题解
  9. 大家好 这就是2018年的我~
  10. Linux环境都没有,怎么学编程?憋说了,肝!(保姆