通常在 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
会根据是否从主执行绪呼叫来更改执行?
uj5u.com热心网友回复:
为什么 this_thread::sleep_for 不需要与 pthread 链接?
因为对的呼叫std::this_thread::sleep_for
转换为对的底层呼叫nanosleep
,它在 中定义libc.so.6
,而不是在 中定义libpthread.so.0
。
请注意,当与 GLIBC-2.34 及更高版本链接时,使用其他功能(以前需要-pthread
)不再需要它,因为GLIBC 摆脱了libpthread
.
另请参阅此答案。
0 评论