我知道在pthread_self()和syscall(SYS_gettid)之间。pthread_create()生成一个POSIX线程ID,该ID由通常定义为unsigned long int的结构pthread_t表示。我们可以使用pthread_self获取由pthread_create生成的。
使用strace,我知道libpthread.so.0中的pthread_create()是通过调用clone系统调用来实现的,这也是用于fork()的系统调用。在通过调用pthread_create()创建POSIX线程之后,将生成一个新的POSXI线程(由pthread_self()返回的线
在ps的管理中
tid TID the unique number representing a dispatchable
entity (alias lwp, spid). This value may also
appear as: a process ID (pid); a process group
ID (pgrp); a session ID for the session leader
Linux上的一个资源提到通过克隆系统调用来实现p线程创建,而其他基于unix的平台(后者以其他方式实现相同)。
这意味着在linux下,使用pthread_create从同一个进程创建的两个线程将具有不同的父进程ids。
$ ./a.out
new thread: pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)
问题
虽然克隆系统调用创建了一个子进程,该进程可以共享父进程执行上下文的可配置量(例如文件描述符和内存),但在我看来,在所有实现中,这可能不是最有效的。在Linux下,对于从pthread_c