在实践中,我应该选择哪一个?除了 std::thread
是一个类之外,它们的技术差异是什么?
在实践中,我应该选择哪一个?除了 std::thread
是一个类之外,它们的技术差异是什么?
std::thread
很适合 - 它抽象级别更高,接口非常好,并且可以与其他 C++11 类很好地配合使用。std::thread
类在每个平台上(尚)不能可靠工作,即使 C++11 可用。例如,在本机 Android 或 Win64 上,std::thread
不起作用或存在严重的性能瓶颈(截至2012年)。boost::thread
- 它非常类似于 std::thread
(实际上是同一作者),并且可靠工作,但是,当然,它会引入第三方库的依赖。std::thread
在本机 Android 上大部分情况下都能够正常工作。某些类,如 std::timed_mutex
仍未实现。std::thread
及其RAII风格很好,因为它可以处理C++异常,而pthread不能直接处理。 - Jesse Goodstd::thread
吗?相比MSVC,我会预期性能会有所下降,因为它们使用了pthreads的端口,但是MSVC应该是没问题的。 - Jesse Goodstd::thread
。它是跨平台的,正如另一个回答者所说,具有未来性,并且不会遇到性能瓶颈问题。 - KeyC0destd::thread
在Windows上运行良好。相反,在VC++中,POSIX线程不存在。 - rustyxstd::thread
库是在支持pthreads(例如:libstdc++)的环境中基于pthread实现的。
我认为两者之间的最大区别是抽象性。 std::thread
是一个C++类库。 std::thread
库包含许多抽象特性,例如:作用域锁、递归互斥锁、未来/承诺设计模式实现等。
std::thread
提供了在不同平台(如 Windows、MacOS 和 Linux)之间的可移植性。
正如下面评论中 @hirshhornsalz 所提到的和相关答案 https://dev59.com/qGcs5IYBdhLWcg3wGgJc#13135425,std::thread
在所有平台上可能尚未完整。但即便如此,(在不久的将来)它应该比 pthread
更优秀,因为它可以使您的应用程序更加未来化。
boost::thread
,因为std::thread
仍然缺少很多部分,在Linux上,std::thread
似乎相当成熟。 - Gunther Piez对我来说,在标准库中缺少信号处理原语与pthreads相比是技术上的决定性差异。使用仅限于std无法正确指示Unix进程中的信号处理,据我所知,这是使用std::thread的致命缺陷之一,因为它阻止了您设置真正的多线程信号处理模式来在专用线程中处理所有信号并在其余部分中阻止它们。您被迫假设std::thread使用pthreads实现,并在使用pthread_sigmask时抱最大希望。在Unix系统编程中,适当处理信号是不可妥协的企业级需求。
截至2016年,std::thread只能算是玩具,就这么简单。
std::thread
带来了 pthread 没有的类型安全性。 - alfCstd::thread
对线程数量有限制,而POSIX线程没有这个限制。似乎C++中的线程创建会检查一个名为DefaultTasksMax
的systemd
属性,而Posix的libpthread
没有进行这个检查。
std::async
。 - Stephan Dollbergstd::thread
相同的问题。 - Gunther Piezstd::thread
或pthreads
则没有。 - Stephan Dollberg