Linux上的一个资源提到使用克隆系统调用实现pthread-create,而不是基于其他基于unix的平台(在其他方面实现相同).
这意味着在linux下,使用pthread_create从同一进程创建的两个线程将具有不同的父进程ID.
$ ./a.out
new thread: pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)
Run Code Online (Sandbox Code Playgroud)
题
看起来您可能正在使用pthreads 的过时LinuxThreads实现,它为每个线程返回了不同的pid.当前的实现是NPTL(Native POSIX Threads Library),它没有这样做.它仍然使用clone(),虽然clone()已得到增强,可以在其上构建高效的POSIX兼容线程实现,NPTL广泛使用这些增强功能.
您可以使用该命令确定要使用的实现getconf GNU_LIBPTHREAD_VERSION.有关详细信息和差异列表,请参阅pthreads(7).