为什么 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
.
另见 。
通常在 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
.
另见