Sha*_*dor 143 c++ multithreading pthreads c++11
为什么我在练习中更喜欢一个或另一个?什么是技术差异,除了std::thread
是一个类?
Gun*_*iez 110
如果要在许多平台上运行代码,请选择Posix Threads.它们几乎可以在任何地方使用并且非常成熟.另一方面,如果你只使用Linux/gcc std::thread
就完全没问题 - 它具有更高的抽象级别,一个非常好的界面,并且与其他C++ 11类很好地配合.
std::thread
遗憾的是,C++ 11 类在每个平台上都不可靠(即使C++ 11似乎可用).例如,在原生Android std::thread
或Win64中,它只是不起作用或具有严重的性能瓶颈(截至2012年).
一个很好的替代品boost::thread
- 它非常类似于std::thread
(实际上来自同一作者)并且可靠地工作,但是,当然,它引入了来自第三方库的另一个依赖.
编辑:截至2017年,std::thread
主要适用于原生Android.有些类std::timed_mutex
仍未实现.
Aki*_*shi 54
该std::thread
库是在支持pthreads的环境中的pthreads之上实现的(例如:libstdc ++).
我认为两者之间的巨大差异是抽象.std::thread
是一个C++类库.该std::thread
库包含许多抽象功能,例如:作用域锁,递归互斥锁,未来/承诺设计模式实现等.
Bra*_*ady 30
std::thread
提供跨Windows,MacOS和Linux等不同平台的可移植性.
正如@hirshhornsalz在下面的评论和相关答案/sf/answers/919479781/中所提到的,std::thread
可能尚未在所有平台上完成.即便如此,(它将在不久的将来)它应该受到青睐,pthread
因为它应该使你的应用程序更具有前瞻性.
对我来说,决定性的技术差异是std中缺少信号处理原语而不是pthreads.单独使用std无法在Unix进程中正确地指示信号处理是AFAIK使用std :: thread的一个令人衰弱的缺陷,因为它禁止设置真正的多线程信号处理模式来处理专用的所有信号线程并阻止它们在其余部分.你被迫假设std :: thread是使用pthreads实现的,并希望在使用pthread_sigmask时最好.正确处理信号在企业的Unix系统编程中是不可协商的.
截至2016年,std :: thread是一个玩具; 就那么简单.
归档时间: |
|
查看次数: |
74673 次 |
最近记录: |