我一直在使用pthreads库编程示例,因为我理解什么是多线程。最近我在互联网上遇到了Boost线程库并且很好奇。任何人都可以指出两者之间的显着差异吗?是否有来自Boost的额外特权,如果是,那么那些是什么?
答案 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做这些事情。
答案 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概念的容器。