码迷,mamicode.com
首页 > 编程语言 > 详细

linux c++ 多线程心得

时间:2017-11-09 14:47:47      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:c++   linux c   span   引用   参数传递   creat   线程   第一个   create   

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

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”; 这种编译期处理的值? 说不明白。。。

2.pthread_create 参数传递指针问题

http://blog.csdn.net/jfkidear/article/details/7918425

结论:函数传参用值,不要传指针,或者使用 ,额外的队列,线程池

 

linux c++ 多线程心得

标签:c++   linux c   span   引用   参数传递   creat   线程   第一个   create   

原文地址:http://www.cnblogs.com/zendu/p/7808745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!