Linux
的线程是“轻量级进程”(Light-Weight Process
,即LWP
)。在Linux
系统上运行一个程序时,操作系统会为这个程序创建一个进程,其实也就是“主线程”,后续则可以产生出更多的线程。每个进程都有一个PID
(Process ID
),每个线程也会有一个TID
(Thread ID
),属于同一进程的线程各自有拥有不同的TID
,但它们的PID
是相同的,都等于“主线程”的TID
。因此从本质上来讲,Linux
系统下的进程和线程没有区别,只不过同一进程中的线程可以共享某些资源。下面看一个例子:
#include <unistd.h>
#include <omp.h>
int main(void){
#pragma omp parallel num_threads(4)
for(;;)
{
sleep(1);
}
return 0;
}
编译并在后台运行这个程序:
$ gcc -fopenmp threads.c
$ ./a.out &
[1] 9802
进程的PID
是9802
,用ps -T pid
命令查看进程的线程信息:
$ ps -T 9802
PID SPID TTY STAT TIME COMMAND
9802 9802 pts/1 Sl 0:00 ./a.out
9802 9803 pts/1 Sl 0:00 ./a.out
9802 9804 pts/1 Sl 0:00 ./a.out
9802 9805 pts/1 Sl 0:00 ./a.out
其中SPID
即为TID
。可以看到当前进程的PID
是9802
,共包含4
个线程,其TID
依次为:9802
,9803
,9804
和9805
,其中PID
和SPID
相同的线程即为主线程。