日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Linux多线程的进阶理解

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux多线程的进阶理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先來看在Linux中如何實現多線程的,下面是《Linux內核設計與實現第三版》中掃描頁的截圖:

?這段話我冒昧的解析一下,如有不當,歡迎指出,大家共同進步!

在Linux中線程和進程沒有任何區別(站在內核角度來看),每個線程屬于自己的task_struct,task_struct相當于在進程中的PCB(進程描述符),每創建一個新的進程就有一個新的進程描述符,在內核中線程看起來就是普通的進程,但是這個進程和它的主線程(在內核看來就是主進程)共享一塊內存地址,同一個進程描述符!

下面來看一段代碼來證明這個些個理論

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>void* fun(void* arg)
{for(int i = 0 ; i < 20 ; i++){printf("pid = %d \n",getpid());   //創建兩個子線程來打印當前的進程idsleep(2);}pthread_exit(NULL);
}int main()
{pthread_t id[2];for(int i = 0 ; i < 2 ; i++){pthread_create(&id[i],NULL,fun,NULL); }for(int i = 0 ; i < 2 ; i++){pthread_join(id[i],NULL);}
}

?然后上面代碼的主要作用就是主線程創建兩個子線程,來打印當前的進程id下面我來看運行結果:

??可以看出來兩子線程打印的id一毛一樣,并且ps -eLf? |? grep 查看進程的時候,發現子線程打印出來的id就是主線程(主進程)的進程id,且有三個進程,這樣也印證了我們開頭說的那些話,在Linux內核看來,進程和線程沒區別,只不過線程共享部分資源,例如內存,線程描述符等東西!

這玩意我們老師說面試經常考,還是希望各位親兄弟好好看一下!

“聞雞起舞!”

總結

以上是生活随笔為你收集整理的Linux多线程的进阶理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。