pthread執行緒使用範例

2021-09-12 17:34:28 字數 1269 閱讀 3760

使用pthread執行緒庫時,應該包含標頭檔案pthread.h

#include
編譯時需要加上 -lpthread鏈結該庫

建立執行緒使用介面

int pthread_create(pthread_t *tidp, 

const pthread_attr_t * attr,

void *(*start_rtn)(void),

void *restrict arg);

第乙個引數tidp為型別為pthread_t的指標,代表執行緒的tid

第二個引數attr為設定執行緒屬性的結構體pthread_attr指標,不需要設定可以置為null

第三個引數start_rtn為void* (void*) 型別的函式指標,就是執行緒的入口函式了

第四個引數restrict_arg為執行緒入口帶的引數,因為是(void*)所以通過型別強制轉換可以是任何引數

類似這樣:

void *routine1(void *arg)//執行緒入口函式

pthread_rwlock_t rwlock;//定義乙個讀寫鎖,一般定義為全域性變數

global num = 0;

func()

完整的簡單使用範例如下:

#include #include #include #include #include #include pthread_rwlock_t rwlock;

int global = 0;

void *routine1(void *arg)

void *routine2(void *arg)

void *routine3(void *arg)

int main (int argc, char *ar**)

其中,

pthread_exit(null);為執行緒退出的函式,可以帶上自己想返回給主線程的引數,如:

pthread_exit("thread1 exit!");
在主線程使用 pthread_join() 來接合子執行緒獲取返回的引數,如:

void *dead_str;

pthread_join(tid1, &dead_str);

printf("%s",(char*) dead_str);//假設返回的是字串

pthread執行緒使用小結

1.奇怪的執行緒引數初始化 for i 0 i 上面 應該很容易明白,建立多個執行緒,傳入序列號作為執行緒id 基實這裡存在乙個大 bug,傳遞的引數會不成功!示例 include include include include include void thread client function...

多執行緒pthread使用

pthread create 標頭檔案 include 原型 int pthread create pthread t tidp,const pthread attr t attr,void start rtn void void arg 作用 建立乙個執行緒 返回值 執行緒建立成功返回0,建立失敗...

pthread執行緒使用小結

pthread執行緒使用小結 1.奇怪的執行緒引數初始化 for i 0 i 上面 應該很容易明白,建立多個執行緒,傳入序列號作為執行緒id 基實這裡存在乙個大 bug,傳遞的引數會不成功!示例 輸出 gcc o test thread test thread.c lpthread test thr...