C 11 STD ::线程与POSIX线程
C++11 std::threads vs posix threads
为什么在实践中我应该更喜欢一个或另一个?什么是技术差异,除了std::thread
是类?
如果要在许多平台上运行代码,请选择POSIX线程。它们几乎到处都可以买到,而且很成熟。另一方面,如果您仅使用Linux/GCC std::thread
非常好 - 它具有较高的抽象水平,一个非常好的界面,并且与其他C 11类播放。
不幸的是,即使C 11似乎可用,C 11 std::thread
类在每个平台上都无法可靠地工作。例如,在本地Android std::thread
或Win64中,它只是不起作用或具有严重的性能瓶颈(截至2012年)。
一个很好的替代品是boost::thread
-它与std::thread
非常相似(实际上是来自同一作者),并且可靠地工作,但是,当然,它从第三方库中介绍了另一种依赖性。
编辑:截至2017年,std::thread
主要在本机Android上工作。有些类,例如std::timed_mutex
仍未实现。
std::thread
库是在支持pthreads的环境中的pthreads顶部实现的(例如:libstdc )。
我认为两者之间的最大差异是抽象。std::thread
是C 类库。std::thread
库包含许多抽象功能,例如:示波器锁,递归静音,未来/承诺设计模式实现等等。
std::thread
提供跨Windows,MacOS和Linux等不同平台的可移植性。
@hirshhornsalz在下面的评论和相关答案中提到https://stackoverflow.com/a/113135425/1158895,std::thread
可能还不在所有平台上完成。即便如此,(它将在不久的将来)应该比pthread
的偏爱,因为它应该使您的应用程序更具未来。
对我而言,决定技术差异是缺乏STD中的信号处理原始物,而不是Pthreads。仅使用STD在UNIX过程中正确指示信号处理的情况是Afaik是一个使人衰弱的缺陷,因为它禁止一个人设置真正的多线程信号处理模式,以便在专用的所有信号中设置真正的信号螺纹并将其挡在其余部分中。您被迫假设使用pthreads实现std ::螺纹,并在使用pthread_sigmask时获得最佳状态。在企业的UNIX系统编程中,正确处理信号是不可谈判的。
截至2016年,STD ::线程是一个玩具;很简单。
- 如何在C++中挂起和恢复 POSIX 线程?
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- Posix 线程类和启动例程 (pthread)
- POSIX 的问题。线程无法正常工作
- Qt 中的 Posix 线程
- 如何在一个POSIX线程中组合两种不同的等待机制
- POSIX线程,将多个参数传递给具有结构的函数
- 是否允许主线程在进入main()之前生成POSIX线程
- C 11 STD ::线程与POSIX线程
- POSIX:我如何暂停线程
- POSIX线程 - (MUTEX和条件变量)问题
- C++IO/多路复用TCP服务器和POSIX线程
- 如何在C++中安全地销毁 Posix 线程池
- 在POSIX中,我可以保存信号以供调用条件等待的其他线程使用吗.(这些线程来自同一进程)
- std::condition_variable::wait()是POSIX线程取消点吗
- POSIX 线程 - 使用条件变量 MEMORY LEAK 同步分离的线程
- 使用Posix时间的Boost线程超时
- 尝试创建 posix 线程并获得从 'void*' 到 'void* (__attribute__((__cdecl__)) *)(void*) 错误的无效转换
- C++ - 在后台 POSIX 线程上使用固定增量时间循环
- 等待多个线程(Posix线程,c++)