【问题标题】:What are the prominent differences in the Boost Thread library or the Pthreads? [duplicate]Boost Thread 库或 Pthreads 的显着区别是什么? [复制]
【发布时间】:2011-08-03 15:04:24
【问题描述】:

可能重复:
PThread vs boost::thread?

自从我了解什么是多线程以来,我就一直在使用 pthreads 库编程示例。最近,我在互联网上偶然发现了 Boost 线程库并很好奇。谁能具体说明两者之间的显着区别是什么? Boost 是否提供了任何额外的特权,如果是,那么这些是什么?

【问题讨论】:

  • @Code Monkey:不完全是重复的,但大多数答案都可以应用于这个问题。

标签: c++ multithreading boost pthreads


【解决方案1】:

boost::thread 的设计深受 pthreads 的影响,但它的样式当然是 C++ 库而不是 C 库。以下是我想到的一些差异。我并不认为这是一份详尽的差异清单。

pthreads 具有 boost::thread 所缺乏的东西:

当你使用 boost::thread 时,你可以获取底层的pthread_t(或者 pthread_mutex_t 等)通过调用 native_handle() 成员 功能,并使用它来恢复未提供的功能 直接通过 boost::thread。

  • 设置调度参数(pthread_attr_setschedparam)
  • 堆栈查询、操作 (pthread_attr_getstacksize)
  • 互斥/优先级查询、操作 (pthread_mutex_getprioceiling)

boost::thread 具有 pthreads 所缺乏的东西:

在 pthreads 中可以做以下事情(毕竟 boost::thread 在 pthreads 上实现)。但是没有明确和直接的API pthreads 来做这些事情。

  • 线程句柄和线程 ID 的不同类型
  • 可以表示“不是任何线程”的线程 ID
  • 能够在具有任意参数的任意函子上启动线程
  • 使用任意参数“调用一次”任意函子的能力
  • 条件变量等待任意可锁定类型的能力
  • 能够一次锁定多个互斥锁而不会出现死锁
  • 一种将线程 ID 存储在关联容器中的可移植方式
  • RAII 支持解锁互斥锁

【讨论】:

    【解决方案2】:

    根据我的经验,boost::thread 库的功能与 pthread 密切相关。 pthread 中提供了一些在 boost::thread 库外部的东西,但在 boost 中仍然可用(例如 boost::interprocess 中提供的信号量)。

    我看到的主要好处是能够[更]轻松地编写跨平台代码。由于 boost::thread 库似乎是作为各种操作系统原语的跨平台接口层实现的,所以我认为在 boost::thread 中找不到重要的附加功能,这些功能在实际的操作系统 API。

    事实上,Windows 的一些基本功能我还没有找到真正的等价物,这主要是根据我在 Win32 方面的经验,几乎可以肯定是因为我对这两种增强功能提供的内容的了解有限::thread 和 pthread 库。

    【讨论】:

      【解决方案3】:

      来自documentation of Boost.Thread

      Boost.Thread 允许在可移植 C++ 代码中使用多个执行线程来共享数据:

      便携

      pthread 属于 unix 系统,因此如果您在代码中使用它们,您的代码将无法移植到(例如)Windows。

      C++

      Boost.Thread 是一个 C++ 库,而 pthread 是一个“C”库:如果您的应用程序是用 C++ 编写的,那么您可以利用它来简化您的代码(例如,将 Threads 对象放在容器中了解可移动的概念)。

      【讨论】:

        猜你喜欢
        • 2013-05-22
        • 2014-09-02
        • 2011-12-15
        • 2012-01-22
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 2021-04-27
        • 1970-01-01
        相关资源
        最近更新 更多