使用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...