pthread create 函式用法

2021-05-27 06:42:45 字數 1646 閱讀 9198

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

#include 

int pthread_create(pthread_t *restrict tidp,

const pthread_attr_t *restrict attr,

void *(*start_rtn)(void),

void *restrict arg);

returns: 0 if ok, error number on failure

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

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

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

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

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

下面這個程式中,我們的函式thr_fn

不需要引數,所以最後乙個引數設為空指標。第二個引數我們也設為空指標,這樣將生成預設屬性的執行緒。當建立執行緒成功時,函式返回0,若不為0則說明建立執行緒失敗,常見的錯誤返回**為eagain和einval。前者表示系統限制建立新的執行緒,例如執行緒數目過多了;後者表示第二個引數代表的執行緒屬性值非法。建立執行緒成功後,新建立的執行緒則執行引數三和引數四確定的函式,原來的執行緒則繼續執行下一行**。

#

include

#include

>

#

include

>

#include

>

#include

pthread_t ntid;

void printids(

const

char

*s)void

*thr_fn(

void

*arg

)int main(

)

printids(

"main thread:");

sleep

(1);

return 0;

}

把apue2上的乙個程式修改一下,然後編譯。

結果報錯:

pthread.c:(.text+0x85):對『pthread_create』未定義的引用

由於pthread庫不是linux系統預設的庫,連線時需要使用庫libpthread.a,所以在使用pthread_create建立執行緒時,在編譯中要加-lpthread引數:

gcc -o pthread -lpthread pthread.c

pthread create函式詳解

pthread create是unix環境建立執行緒函式 include int pthread create pthread t restrict tidp,const pthread attr t restrict attr,void start rtn void void restrict a...

執行緒建立函式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 函式的第四個引數 指標引數 傳入的值會被主線程隨時修改時,這時我們...