boost :: thread vs std :: thread vs pthread

问题描述

对于高cpu吞吐量(请参阅:大量浮点操作),基于Linux的应用程序,黑白平衡boost::threadstd::thread(C ++ 11)和pthread的平衡?什么时候应该使用一种实现而不是其他实现?

这里的用例是在多线程实现中调用连续内存的缓冲区(或指向缓冲区的指针)上的例程,进行一些工作,然后返回-

解决方法

  • std::thread
    • Pro:是标准配置;保证可以在所有兼容平台上使用。
    • Con:需要C ++ 11,因此不能与Ancient一起使用。编译器。只有基本的,最低的公分母功能。但是,仍可以通过std::thread::native_handle使用平台特定的功能。
  • boost::thread
    • Pro:是跨平台的,在古代编译器中受支持。
    • 缺点:不是标准的;需要外部依赖。与标准线程类似的功能集。
  • pthread
    • 专业版:具有更多功能,例如计划策略。
    • Con:仅在POSIX系统上,不包括Windows。非RAII界面。
  • 什么时候应该使用一种实现?

    std::thread通常是一个很好的默认设置。如果您需要标准中未包含的pthread功能,则可以在std::thread::native_handle的帮助下使用它们(以及随之而来的可移植性)。没有理由在C ++中直接使用pthread

    boost::thread可用于需要较早的C ++ 11以前的支持以保持可移植到其他系统的情况。


    请注意,std::thread本身不需要直接使用。该标准具有有用的抽象,例如std::reducestd::packaged_taskstd::async,算法的并行执行策略等。

    ,

    唯一受标准支持的是std::thread,如果构建工具允许使用C ++ 11或更高版本,则应使用该标准。它是boost::thread的派生但标准化版本。

    Pthreads是特定于平台的线程实现,std::thread由C ++ 11的标准保证。通常在类似POSIX的系统上,std::thread在内部使用pthreads。

    相关问答

    Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
    Python-如何使用点“。” 访问字典成员?
    Java 字符串是不可变的。到底是什么意思?
    Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
    “loop:”在Java代码中。这是什么,为什么要编译?
    java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...