C++日积月累—std::thread vs pthread

选pthread

  • C++11 thread库里的future居然没不能做chain,也就是说你创建了一个future之后,只能用blocking的方式去等它的值算出来,要知道连node这种东西都能串联future了啊……
  • C++11 thread库里居然没有shared_mutex,这种东西居然也能拖3年?
  • C++11 thread库居然没有executor之类的thread pool,类比一下,有多少Java程序会去用光杆thread的?
  • 在Linux/GCC/libstdc++下,C++11 thread库居然强制动态连接pthread,如果你编译连接的时候忘了-pthread参数,一直要到运行的时候才会报错,得多脑残的人才会把这个库做成这样?
  • thread的一些基本属性列如优先级、CPU affinity之类的东西居然都没进标准,标准委员会留这么大个空白是打 算照顾8088上的DOS版么?
  • 至于std::ref/cref之类的东西我就不吐槽了,毕竟这是C++语言的锅,轮不到thread库来背。
  • 如果只在 Linux 下编程,那么 C++11 的 thread 的附加值几乎为零

选std::thread

  • std::thread配合lambda表达式创建个线程运行,很方便!
  • thread对象直接join或者detach,很方便!
  • 使用thread再配合mutex的std::unique_lock和std::lock_guard使用,很方便!
  • 使用thread再配合条件变量使用,很方便!
  • 使用std::this_thread::sleep_for(xxx)休眠某段时间,很方便!
  • std::thread在多数场景下已经够用,但是如果有更多需求,列如设置线程优先级,设置CPU亲和性,设置线程名字的东西,即便std::thread没有相关函数,但是可以获取std::thread的native_handle再进一步用Posix函数封装一下。

Reference

徐辰
程序喵大人

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容