【问题标题】:Implementation of pthread_create on LinuxLinux上pthread_create的实现
【发布时间】:2010-11-24 15:17:02
【问题描述】:

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 创建的每个线程,是否都有相应的进程(尽管它会与其他进程共享资源)?这种解释正确吗?

【问题讨论】:

    标签: pthreads unix


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多