【C++多线程】C++中的pthread和thread

  多线程编程中会用到两个头文件,thread和pthread。

  pthread早于thread出现,本来是在类POSIX系统中用来多线程编程的,Windows原生不支持。C++11之后, 只要Windows、Linux支持C++11都可以使用原生的thread头文件, 这是C++标准委员会支持的原生语法。

  尽管thread可以用来进行跨平台的多线程编程,但是thread跟pthread有诸多不同。

  thread是C++的API, 不可以在C++中调用,换句话说,它更加简单和安全。 它大量使用RAII来确保资源在超出范围时得到回收,并允许您从函数对象创建一个线程,具有所有的灵活性,而不是被限制为C风格的自由函数。

  pthread是一个C的API,因此它不提供任何RAII,这使得它更难使用,更容易出错,特别是就异常安全性而言(除非你自己编写了包装,你现在必须调试 并保持)。所谓RAII是 Resource Acquisition Is Initialization 的简称,是C++语言的一种管理资源、避免泄漏的惯用法,利用的是C++构造的对象最终会被销毁的原则。

  当然了,尽管听起来对开发人员好像挺友好的,thread也有被吐槽的。

1
2
3
4
5
6
7
8
9
10
11
C++11 thread该做的东西没做,不该做的东西反倒写了一大堆。
1、 C++11 thread库里的future居然不能做chain,也就是说你创建了一个future之后,只能用blocking的方式去等它的值算出来,要知道连node这种东西都能串联future了啊……
2、 C++11 thread库里居然没有shared_mutex,这种东西居然也能拖3年?
3、 C++11 thread库居然没有executor之类的thread pool,类比一下,有多少Java程序会去用光杆thread的?
4、 在Linux下,C++11 thread库居然强制动态连接pthread,如果你编译连接的时候忘了-pthread参数,一直要到运行的时候才会报错,得多脑残的人才会把这个库做成这样?
5、 thread的一些基本属性比如优先级、CPU affinity之类的东西居然都没进标准,标准委员会留这么大个空白是打算照顾8088上的DOS版么?
 
作者:徐辰
链接:https://www.zhihu.com/question/36236334/answer/98422670
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考

https://stackoverflow.com/questions/19209214/if-i-have-pthread-code-on-linux-is-there-an-advantage-to-implementing-the-same

posted @   stackupdown  阅读(3953)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示