【问题标题】:Should I prefer std::thread or Boost threads?我应该更喜欢 std::thread 还是 Boost 线程?
【发布时间】:2012-09-04 02:48:27
【问题描述】:

我是 C++ 新手(来自 C#),正在编写一个多线程 C++ 应用程序,想知道哪个更好用:std::thread 或它的 Boost 对应物?

我在另一个 Stack Overflow 帖子中看到了 following discussion,但仍然不知道为什么要选择一个而不是另一个。如果不启动新程序,我应该使用标准库还是 Boost 线程?

谢谢!

【问题讨论】:

  • 我相信 std::thread 的实现是基于 boost::thread 的实现,所以应该没有太大的区别。
  • boost::threadstd::thread 完全不同。它们不可互换。 boost::thread 是几年前设计的,可见它的年代了。
  • 嗨,你应该提到是否使用 VS(如果是 2010 年或 2012 年)...顺便说一句,你可能想读这个:akrzemi1.wordpress.com/2012/11/14/not-using-stdthread

标签: c++ multithreading boost


【解决方案1】:

如果您尚未在项目中使用 boost,则没有理由使用 boost::thread 来支持 std::thread。除非您使用的是 STL 中不可用的 boost 中的某些功能。 std::thread 足够适用于大多数用例,除非提出令人信服的论据,否则编写标准代码总是更可取的。

如果您已经在项目中使用了 boost,请检查 boost::thread 与 std::thread 相比是否提供了额外的功能。

【讨论】:

  • 我发现在 boost 版本之上更喜欢带有编译器标准库的版本的原因之一是编译器的版本可以针对 boost 必须在许多平台和供应商之间兼容的平台进行更多优化.一个典型的例子是shared_ptr<> - boost 引入了大量的标头,而 Visual Studio 2008 仅引入了几个,当我们切换到它时,这对我们的构建时间产生了显着的积极影响。跨度>
  • 你的意思是 std::thread 不会增加二进制大小吗?恐怕这是不正确的假设。
  • @IgorR。确实你是对的,我已经从我的回答中删除了这个陈述,因为它具有误导性
  • @the_mandrill 请注意,在 VS2008 中,shared_ptr 是错误的并且执行得非常糟糕!以下(根据标准,合法)代码将在那里崩溃: struct a { a() : p_(this, mem_fn(&a::delete_me)) {} void reset() { p_.reset(); } void delete_me() { 删除这个; } shared_ptr p_; }; int main() { a* p = new a; p->重置(); }
  • 好的,我自己从来没有遇到过这个问题。我认为我的观点仍然存在。我不一定要谈论增加二进制大小,只是可能使用编译器的标准库而不是更便携的实现(例如 boost)有一些好处(例如编译时间、性能) >
【解决方案2】:

请记住,Boost.Thread 是一个可移植库,可以在各种平台/编译器上编译 - 包括那些 std::thread 不可用的平台。

【讨论】:

    【解决方案3】:

    这真的取决于你的习惯和喜好.. 使用 boost,您拥有一整套让您的生活更轻松的库,但它们需要安装在编译程序的系统上,而使用 std 线程,您只需要一个 cpp 编译器。

    【讨论】:

    • 对于std::thread,您需要专门的 C++11 编译器。现有的所有所谓的 C++11 编译器都是部分完整的,并且在不断变化,因此使用它不一定是明智之举。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多