linux c++ 多线程心得

我很久没有写过关于多线程的文章了,我已经有几年没有大规模地写太多的多线程了,所有这些都是在形成的体系结构中编写的业务逻辑。偶尔自己写下,各种踩踏坑。

[En]

I haven’t written about multithreading for a long time, and I haven’t written too much multithreading on a large scale for several years, all of which are written business logic in the formed architecture. Occasionally wrote down by myself, all kinds of trampling pits.

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

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

Original: https://www.cnblogs.com/zendu/p/7808745.html
Author: zyz913614263
Title: linux c++ 多线程心得

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10226/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部