为什么 this_thread::sleep_for 不需要链接到 pthread?

Why doesn't this_thread::sleep_for need to be linked against pthread?

通常在 GCC 中构建与线程相关的代码时,需要针对 pthread 进行显式链接:

g++ -pthread main.cxx

但是,以下代码编译、链接和运行良好,无需链接到 pthread:

#include <iostream>
#include <thread>

using namespace std::chrono_literals;

int main() {
    std::this_thread::sleep_for(1000ms);
    return 0;
}

我想这里发生的事情是 std::this_thread::sleep_for 正在使用 libc 中的某些 POSIX 函数(而不是 pthread 中的函数)?但如果是这样,std::this_thread::sleep_for 的执行是否会根据是否从主线程调用而改变?

Why doesn't this_thread::sleep_for need to be linked against pthread?

因为对 std::this_thread::sleep_for 的调用转换为对 nanosleep 的基础调用,它在 libc.so.6 中定义,而不是在 libpthread.so.0 中定义。

请注意,当与 GLIBC-2.34 及更高版本链接时,使用其他函数(以前需要 -pthread)不再需要它,因为 GLIBC got rid of libpthread.

另见