1. 程式人生 > 其它 >Linux系統實現多執行緒的方式

Linux系統實現多執行緒的方式

Linux系統實現多執行緒的方式
Linux 實現執行緒的機制非常獨特。從核心的角度來說,它並沒有執行緒這個概念。 Linux 把所有的執行緒都當做程序來實現。核心並沒有準備特別的排程演算法或是定義特別的資料結構來表徵執行緒。相反,執行緒僅僅被視為一個與其他程序共享某些資源的程序。每個執行緒都擁有唯 一隸屬於自己的task_struct,所以在核心中,它看起來就像是一個普通的程序(只是執行緒和 其他一些程序共享某些資源,如地址空間)

執行緒和程序的區別
程序是資源分配最小單位,執行緒是程式執行的最小單位;
執行緒間的切換效率相比程序間的切換要高
程序有自己獨立的地址空間,每啟動一個程序,系統都會為其分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,執行緒沒有獨立的地址空間,它使用相同的地址空間共享資料;
建立一個執行緒比程序開銷小;
執行緒佔用的資源要⽐程序少很多。
執行緒之間通訊更方便,同一個程序下,執行緒共享全域性變數,靜態變數等資料,程序之間的通訊需要以通訊的方式(IPC)進行;(但多執行緒程式處理好同步與互斥是個難點)
多程序程式更安全,生命力更強,一個程序死掉不會對另一個程序造成影響(源於有獨立的地址空間),多執行緒程式更不易維護,一個執行緒死掉,整個程序就死掉了(因為共享地址空間);
程序對資源保護要求高,開銷大,效率相對較低,執行緒資源保護要求不高,但開銷小,效率高,可頻繁切換;
多執行緒開發的三個基本概念
執行緒 【建立、退出、等待】
互斥鎖【建立、銷燬、加鎖】、解鎖】
條件【建立、銷燬、觸發、廣播、等待】
執行緒庫的使用
1.建立執行緒

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<unistd.h>

#include<pthread.h>

//宣告一個執行緒函式
void *fun(void *);

int main()
{
    printf("main start\n");

    pthread_t id;
    //建立函式執行緒,並且指定函式執行緒要執行的函式
    int res = pthread_create(&id,NULL,fun,NULL);
    assert(res 
== 0); //之後併發執行 int i = 0; for(; i < 5; i++) { printf("main running\n"); sleep(1); } printf("main over\n"); exit(0); } //定義執行緒函式 void* fun(void *arg) { printf("fun start\n"); int i = 0; for(; i < 3;i++) { printf("fun running\n
"); sleep(1); } printf("fun over\n"); }

版權宣告:本文為CSDN博主「Dutkig」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_44824574/article/details/110672780