在Linux上实现pthread_create

时间:2009-09-01 12:33:31

标签: pthreads unix

Linux上的一个资源提到pthread-create是使用克隆系统调用实现的,而不是基于其他基于unix的平台(在其他方面实现相同的)。
这意味着在linux下,使用pthread_create从同一进程创建的两个线程将具有不同的父进程ID。

$ ./a.out
new thread:  pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)  

问题

  • 虽然克隆系统调用创建了一个子进程,可以共享其父进程执行上下文的可配置数量(例如文件描述符和内存),但在我看来,在所有实现中,这可能不是最有效的。在Linux下,对于从pthread_create创建的每个线程都有相应的进程(虽然它会与其他进程共享资源)?这种解释是否正确?

1 个答案:

答案 0 :(得分:6)

看起来您可能正在使用pthreads的过时的 LinuxThreads 实现,它为每个线程返回了不同的pid。当前的实现是 NPTL (本机POSIX线程库),它没有这样做。它仍然使用clone()实现,尽管clone()已得到增强,以允许在其上构建高效的POSIX兼容线程实现,并且NPTL广泛使用这些增强功能。

您可以使用命令getconf GNU_LIBPTHREAD_VERSION确定要使用的实现。有关详细信息和差异列表,请参阅pthreads(7)