C++ Boost线程库和Pthreads的显著区别是什么?

C++ Boost线程库和Pthreads的显著区别是什么?,c++,multithreading,boost,pthreads,C++,Multithreading,Boost,Pthreads,可能重复: 自从我理解了什么是多线程以来,我一直在使用pthreads库编程示例。最近,我在互联网上偶然发现了Boost线程库,并对此感到好奇。有人能具体说明两者之间的显著区别吗?Boost是否提供了任何额外的特权,如果是,那么这些特权是什么?根据我的经验,Boost::thread库的功能与pthreads密切相关。pthreads中提供的一些东西是boost::thread库外部的,但在boost中仍然可用(例如boost::interprocess中提供的信号量) 我看到的主要好处是能够

可能重复:


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

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

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

事实上,Windows的一些底层功能我还没有找到真正的等效功能,主要是因为我使用Win32的经验,而且几乎可以肯定,因为我对boost::thread和pthread库中提供的功能了解有限。

来自:

BoST..NoST允许在<>强>可移植C++代码< /强>:< /P>中使用共享数据执行多个线程 便携式

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

C++


线程是一个C++库,而pTog是一个“C”库:如果应用程序是用C++编写的,那么你可以利用它来简化代码(例如,在理解可移动的概念的容器中放置<代码>线程< /代码> S对象)。但是当然,它被设计成C++库而不是C库。在我的脑海中出现了一些不同之处。我并不认为这是一份详尽的差异清单

pthreads有boost::thread缺少的东西:

当您使用boost::thread时,您可以获取底层的
pthread\u t
(或
pthread\u mutex\u t
等),通过调用
native\u handle()
成员 函数,并使用它恢复未提供的功能 直接通过boost::thread

  • 设置调度参数(
    pthread\u attr\u setschedparam
  • 堆栈查询、操作(
    pthread\u attr\u getstacksize
  • 互斥/优先级查询,操作(
    pthread\u互斥\u getprioceiling
boost::thread有pthreads缺少的东西:

在pthreads中可以完成以下操作(毕竟boost::thread 在pthreads上实现)。但目前还没有清晰直接的API pthreads来做这些事情

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

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