Boost Thread库或Pthreads的主要区别是什么?

时间:2011-08-03 15:04:25

标签: c++ multithreading boost pthreads

  

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

我一直在使用pthreads库编程示例,因为我理解什么是多线程。最近我在互联网上遇到了Boost线程库并且很好奇。任何人都可以指出两者之间的显着差异吗?是否有来自Boost的额外特权,如果是,那么那些是什么?

3 个答案:

答案 0 :(得分:11)

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

事情提升::线程有pthreads缺乏:

  

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

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

答案 1 :(得分:2)

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

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

事实上,有一些Windows的基本功能,我无法找到真正的等效功能,主要来自我对Win32的体验,而且几乎可以肯定是因为我对这两种提升中提供的内容有限。 :: thread和pthread库。

答案 2 :(得分:0)

来自documentation of Boost.Thread

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

<强>便携式

pthread是属于unix系统的东西,所以如果你在代码中使用它们,你的代码将无法移植到(例如)Windows。

<强> C ++

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