zoukankan      html  css  js  c++  java
  • Linux线程模型浅析

    转自: https://nanxiao.me/linux-thread-model-analysis/

     

    Linux线程模型浅析

    Linux的线程是“轻量级进程”(Light-Weight Process,即LWP)。在Linux系统上运行一个程序时,操作系统会为这个程序创建一个进程,其实也就是“主线程”,后续则可以产生出更多的线程。每个进程都有一个PIDProcess ID),每个线程也会有一个TIDThread 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
    

    进程的PID9802,用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。可以看到当前进程的PID9802,共包含4个线程,其TID依次为:9802980398049805,其中PIDSPID相同的线程即为主线程。

  • 相关阅读:
    Codeforces Round #417 C. Sagheer and Nubian Market
    linux 终端抓包命令
    计算机网络体系结构分析
    排序算法-快速排序
    排序算法-堆排序
    排序算法-希尔排序
    排序算法-插入排序
    排序算法-冒泡排序
    排序算法-选择排序
    杂谈:终端小工具
  • 原文地址:https://www.cnblogs.com/acSzz/p/13517399.html
Copyright © 2011-2022 走看看