linux中的c++线程

C++ threading in linux

本文关键字:线程 c++ 中的 linux      更新时间:2023-10-16

我正在尝试在Linux中创建一个多线程c++程序。我以前在windows上使用过pthreads库,但我听说它不是Linux的标准配置。你会建议c++和Linux使用什么线程库?有哪些选择,哪些是最常见的,哪些通常是最快的?谢谢!

编辑:我错误地认为pthreads不是linux原生的,正如我所说的,这是我一段时间前听到的。我主要是在寻找各种线程选项之间效率的比较,并且特别好奇关于c-11线程库与我以前使用过的pthreads的执行情况的信息。我被误导了,我把这个问题贴出来是为了获得更多的信息。没必要这么刻薄。

如果使用c++ 11,就使用std::thread。这样做相当简单。例如:

#include <thread>
void thread_entry(int foo, int bar)
{
    int result = foo + bar;
    // Do something with that, I guess
}

// Elsewhere in some part of the galaxy
std::thread thread(thread_entry, 5, 10);
// And probably
thread.detach();
// Or
std::thread(thread_entry).detach();

它很简单,对于大多数用途应该足够了(尽管取决于实现,它可能依赖于pthreads)。

如果没有,就使用pthreads,因为您熟悉它。它是POSIX标准的一部分,大多数Linux发行版都与POSIX标准兼容——至少,它们足够兼容,任何差异对您来说都无关紧要。

假设您没有做任何特别"windowsy"的事情,那么您使用pthreads的windows代码应该在Linux或任何其他形式的Unix上工作一样(只要它是相当现代的-例如自pthreads引入以来的最近10年左右)。

你当然也可以使用std::thread,因为它是由c++ 11支持的,除非你有一个非常旧的g++版本,它应该提供你所需要的,一个面向对象的接口——再说一次,这应该在Windows和Linux上同样有效(当然,要有一个足够现代的编译器和标准库)。