Linux上的pthread_create的实现
问题描述:
Linux上的一个资源提到了使用克隆系统调用来实现pthread-create,而不是其他一些基于unix的平台(其实现方式与此相同)。
这意味着在Linux下,使用pthread_create从同一进程创建的两个线程将具有不同的父进程标识。Linux上的pthread_create的实现
$ ./a.out
new thread: pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)
问题
- 虽然克隆系统调用创建一个子进程可以共享其母公司的执行上下文的配置量(如文件描述符和内存),在我看来,所有执行中这可能不是最有效的。在Linux下,从pthread_create创建的每个线程都有相应的进程(尽管它将与其他进程共享资源)?这个解释是否正确?
答
它看起来就像你可能会使用过时的LinuxThreads 实施的并行线程,它返回一个不同的PID为每个线程。目前的实现是NPTL(原生POSIX线程库),不这样做。它仍然使用clone()
实现,尽管clone()
已经得到增强,允许在其上构建高效的符合POSIX标准的线程实现,并且NPTL广泛使用这些增强功能。
您可以使用命令getconf GNU_LIBPTHREAD_VERSION
确定您正在使用哪个实施。有关详细信息和差异列表,请参阅pthreads(7)。