pthread create函式詳解

2021-06-20 05:23:34 字數 1597 閱讀 5005

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

#include

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系統的預設庫

列印執行緒 ids

#include

#include

#include

#include

#include

pthread_t ntid;

void printids(const char *s)

void *thr_fn(void *arg)

int main(void)

$ gcc main.c -lpthread

$ ./a.out

向執行緒函式傳遞引數詳解:

向執行緒函式傳遞引數分為兩種:

(1)執行緒函式只有乙個引數的情況:直接定義乙個變數通過應用傳給執行緒函式。

例子:#include

#include

using namespace std;

pthread_t thread;

void fn(void *arg)

;然後在main函式

將這個結構體指標,作為void *形參的實際引數傳遞

struct parameter arg;

通過如下的方式來呼叫函式:
pthread_create(&ntid, null, fn,& (arg));
函式中需要定義乙個parameter型別的結構指標來引用這個引數
void fn(void *arg)

void thr_fn(void *arg)

pthread create 函式用法

天開始學習linux下用c開發多執行緒程式,linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void s...

執行緒建立函式pthread create

標頭檔案 include b函式原型 int pthread created pthread t thread,pthread attr t attr,void start routine void void arg 函式引數含義 thread 該引數是乙個指標,當執行緒建立成功時,用來返回建立的執...

pthread create 函式的安全使用

1 pthread create 函式的安全使用問題 做過linux多執行緒開發的人都會用過pthread create函式,但是很少人會注意到 主線程在使用pthread create建立執行緒時,如果pthread create 函式的第四個引數 指標引數 傳入的值會被主線程隨時修改時,這時我們...