JAB*_*JAB 7 multithreading gcc clang c++11
为什么-std=c++11
在编译直接或间接使用的程序时指定std::thread
并不暗示-pthread
?std::thread
使用pthreads 的实现细节暴露给程序员似乎很奇怪; 如果这是给用户选择posix兼容的线程库的问题,为什么不默认为pthreads并有一些--threading-model=<your_favorite_posix_threads_library>
参数来覆盖它?
该-pthread
选项并非普遍需要使用std::thread
- 它是您正在构建的任何平台的实现怪癖。
编译:
#include <thread>
#include <iostream>
int main()
{
std::thread t{[]()
{
std::cout << "Hello World\n";
}};
t.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
clang -std=c++11 ThreadTest.cpp -lc++
Run Code Online (Sandbox Code Playgroud)
在 MacOSX 上,构建并运行,如果我们这样做:
otool -L a.out
a.out:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.0.0)
Run Code Online (Sandbox Code Playgroud)
我们可以看到,我们不需要任何额外的链接来完成这项工作——这也没有发生在幕后。pthreads 是一个单独的库,这似乎是一个平台实现细节。
选择带有 pthread 接口的线程库是 *NIX 系统上的遗留问题,其中许多系统开始时没有线程支持,然后在获得完整内核支持之前经历了用户空间线程阶段。我想它仍然存在,因为没有人喜欢做出重大改变。