Linux多线程的进阶理解
生活随笔
收集整理的這篇文章主要介紹了
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多线程的进阶理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进程间通信(IPC)-----
- 下一篇: 求一个qq网名女一个字!