Linux多執行緒函式解析

2021-06-02 20:40:26 字數 2517 閱讀 2101

linux多執行緒函式解析

linux多執行緒函式用得比較多的是下面的3個

pthread_create(),pthread_exit(),pthread_join();它們都是在標頭檔案之中。編譯時需要加靜態庫-lpthread

下面是函式的說明:

pthread_create是unix環境建立執行緒函式

int pthread_create(

pthread_t *restrict tidp,

const pthread_attr_t *restrict_attr,

void*(*start_rtn)(void*),

void *restrict arg);

返回值

若成功則返回0,否則返回出錯編號

返回成功時,由tidp指向的記憶體單元被設定為新建立執行緒的執行緒id。attr引數用於制定各種不同的執行緒屬性。新建立的執行緒從start_rtn函式的位址開始執行,該函式只有乙個萬能指標引數arg,如果需要向start_rtn函式傳遞的引數不止乙個,那麼需要把這些引數放到乙個結構中,然後把這個結構的位址作為arg的引數傳入。

linux下用c開發多執行緒程式,linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。

由 restrict 修飾的指標是最初唯一對指標所指向的物件進行訪問的方法,僅當第二個指標基於第乙個時,才能對物件進行訪問。對物件的訪問都限定於基於由 restrict 修飾的指標表示式中。 由 restrict 修飾的指標主要用於函式形參,或指向由 malloc() 分配的記憶體空間。restrict 資料型別不改變程式的語義。 編譯器能通過作出 restrict 修飾的指標是訪問物件的唯一方法的假設,更好地優化某些型別的例程。

引數

第乙個引數為指向執行緒識別符號的指標。

第二個引數用來設定執行緒屬性。

第三個引數是執行緒執行函式的起始位址。

最後乙個引數是執行函式的引數。

另外,在編譯時注意加上-lpthread引數,以呼叫靜態鏈結庫。因為pthread並非linux系統的預設庫

pthread_exit(void* retval);

執行緒通過呼叫pthread_exit函式終止自身執行,就如同程序在結束時呼叫exit函式一樣。這個函式的作用是,終止呼叫它的執行緒並返回乙個指向某個物件的指標。該指標可以通過pthread_join(pthread_t tpid, void **value_ptr)中的第二個引數value_ptr獲取到。

函式pthread_join用來等待乙個執行緒的結束。函式原型為:

extern int pthread_join __p (pthread_t __th, void **__thread_return);

第乙個引數為被等待的執行緒識別符號,第二個引數為乙個使用者定義的指標,它可以用來儲存被等待執行緒退出時的返回值。這個函式是乙個執行緒阻塞的函式,呼叫它的函式將一直等待到被等待的執行緒結束為止,當函式返回時,被等待執行緒的資源被收回。如果執行成功,將返回0,如果失敗則返回乙個錯誤號。

所有執行緒都有乙個執行緒號,也就是thread id。其型別為pthread_t。通過呼叫pthread_self()函式可以獲得自身的執行緒號。

下面是乙個簡單的例子,子執行緒thread_fun會打出5次「this is thread_fun print!」然後呼叫pthread_exit退出,並返回乙個指向字串「this is thread return value!」的指標。在主函式裡面呼叫pthread_join等待thread_fun執行緒結束,然後讀取子執行緒的返回值到value中,再列印出來。

輸出結果是:

pthread_create ok!

this is thread_fun print!

this is thread_fun print!

this is thread_fun print!

this is thread_fun print!

this is thread_fun print!

pthread exit value: this is thread return value!

view plain

#include 

#include 

#include 

#include 

#include 

#include 

//void *thread_fun(void *arg)   

pthread_exit((void*)value_ptr);  

}  //

int main(int argc, char **argv)   

printf("pthread_create ok!\n");  

pthread_join(pid, &value);  

printf("pthread exit value: %s\n", value);  

return 0;  

}  

Linux多執行緒函式解析

linux多執行緒函式解析 linux多執行緒函式用得比較多的是下面的3個 pthread create pthread exit pthread join 它們都是在標頭檔案之中。編譯時需要加靜態庫 lpthread 下面是函式的說明 pthread create是unix環境建立執行緒函式 in...

linux中多執行緒解析

介紹linux執行緒的基本概念,執行緒間的互斥和同步機制,分析了linuxpthread庫的api函式,並結合乙個例子闡述多執行緒程式設計的核心技術,最後總結出多執行緒程式設計應注意的事項。中圖分類號 tp316 文獻標識碼 a 1 引言 目前,許多流行的多工作業系統都提供執行緒機制,執行緒就是程式...

Linux多執行緒 執行緒函式

posix執行緒 posix threads 是執行緒的posix標準。該標準定義了建立和操縱執行緒的一整套api。在類unix作業系統 unix linux mac os x等 中,都使用pthreads作為作業系統的執行緒。windows作業系統也有其移植版pthreads win32。執行緒庫...