linux下c語言的多執行緒程式設計

2021-08-09 06:21:23 字數 2093 閱讀 6511

們在寫linux的服務的時候,經常會用到linux的多執行緒技術以提高程式效能

多執行緒的一些小知識:

乙個應用程式可以啟動若干個執行緒。

執行緒(lightweight process,lwp),是程式執行的最小單元。

一般乙個最簡單的程式最少會有乙個執行緒,就是程式本身,也就是主函式(單執行緒的程序可以簡單的認為只有乙個執行緒的程序)

乙個執行緒阻塞並不會影響到另外乙個執行緒。

多執行緒的程序可以盡可能的利用系統cpu資源。

1建立執行緒

先上一段在乙個程序中建立乙個執行緒的簡單的**,然後慢慢深入。

#include#include

#include

#include

#include

void * func(void *arg)

intmain()

else

sleep(1);

return

exit_success;

}

int pthread_create(pthread_t *thread,const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);

在main函式裡面我們呼叫上面的函式進行建立乙個執行緒。

函式引數:

第乙個引數:pthread_t代表建立執行緒的唯一標識,是乙個結構體,需要我們建立好後,將這個結構體的指標傳遞過去。

第二個引數:pthread_attr_t,代表建立這個執行緒的一些配置,比如分配棧的大小等等。。一般我們可以填null,代表預設的建立執行緒的配置

第三個引數:代表乙個函式的位址,建立執行緒時,會呼叫這個函式,函式的返回值是void*,函式的引數也是void*,一般格式就像void * func(void * arg){}

第四個引數:代表呼叫第三個函式傳遞的引數

函式返回值:

函式成功返回0,如果不等於0則代表函式呼叫失敗,此時通過strerror(errno)可以列印出具體的錯誤。

注意:每個執行緒都擁有乙份errno副本,不同的執行緒擁有不同的errno

最後通過gcc編譯

gcc 1createthread.c -c -o 1createthread.o

gcc 1createthread.o -o thr1 -lpthread

編譯的時候需要加上-lpthread 用來鏈結libpthread.so動態庫,不然會提示找不到function

函式呼叫返回結果

問題:為什麼呼叫sleep函式

答:可能新建立的執行緒還沒執行到列印的方法主線程就結束了,而主線程結束,所有執行緒都會結束了。

2執行緒掛起

有時候我們在乙個執行緒中建立了另外乙個執行緒,主線程要等到建立的執行緒返回了,獲取該執行緒的返回值後主執行緒才退出。這個時候就需要用到執行緒掛起。

int pthread_join(pthread_t th, void **thr_return);。

pthread_join函式用於掛起當前執行緒,直至th指定的執行緒終止為止。

#include#include

#include

#include

#include

void * func(void *arg)

int * p = (int *)malloc(sizeof(int

)); *p=11

;

returnp;}

intmain()

else

void *p=null;

pthread_join(t1,&p);

printf(

"執行緒退出:code=%d\n

",*(int*)p);

return

exit_success;

}

函式執行結果

我們主函式一直在等待建立的執行緒執行完,並且得到了執行緒執行結束的返回值

【本文由「程式設計師的悲催」發布,2023年10月12日】

linux下C語言多執行緒程式設計

include include include include define max 10pthread t thread 2 pthread mutex t mut int number 0 i void thread1 printf thread1 主函式在等我完成任務嗎?n pthread e...

多執行緒程式設計 c語言linux下

適用與linux系統 1.了解基本概念 程序 是計算機所執行的乙個任務的描述,是面向作業系統的最小單位,作業系統能執行很多程序 執行自己寫的乙份 程式,就是讓作業系統執行乙個自己程式的程序 作業系統會根據程式分配定量的資源 執行緒 面想程式 程序 的,把乙個程式分成多個執行緒可以實現並髮式,多工執行...

linux 下c語言 多執行緒程式設計

最近學習c語言和linux,記錄一下linux中線程的簡單使用 linux執行緒一般用pthread庫建立。pthread是 posix thread的簡稱。在linux的 lib目錄下,可以找到名為libpthread x.x.so x.x是版本號 的庫。下面模擬兩個執行緒 threaddemo....