gpt4 book ai didi

multithreading - 为什么在 GCC 和 Clang 中使用 std::thread 需要 -pthread?

转载 作者:行者123 更新时间:2023-12-04 06:40:55 26 4
gpt4 key购买 nike

为什么指定 -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;
}


clang -std=c++11 ThreadTest.cpp -lc++

在 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)

我们可以看到,我们不需要任何额外的链接来完成这项工作——也没有在幕后发生。 pthreads 是一个单独的库,这似乎是一个平台实现细节。

选择带有 pthread 接口(interface)的线程库是 *NIX 系统的遗留包袱,其中许多在没有线程支持的情况下开始,然后在获得完整内核支持之前经历了用户空间线程的阶段。我想它仍然存在,因为没有人喜欢做出重大改变。

关于multithreading - 为什么在 GCC 和 Clang 中使用 std::thread 需要 -pthread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33697072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com