【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
分类:
C++基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」