多執行緒程式設計之pthread create函式應用

2021-08-21 21:58:34 字數 3767 閱讀 7842

多執行緒程式設計之pthread_create函式應用

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 arg);

返回值

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

引數

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

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

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

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

另外

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

pthread_join函式

函式簡介

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

函式原型為:

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

引數:

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

例子:

#include

#include

#include

struct member

int num;

char *name;

};

//結構體後的分號勿漏

void *create(void *arg)

//有void* 型引數傳入,不能直接void

struct member *temp;

temp=(struct member *)arg;

//結構體變數之間不能直接賦值,但可以通過指標賦位址

printf("member->num:%d\n",temp->num);

printf("member->name:%s\n",temp->name);

sleep(1);

return (void *)8;

//這個很有特色,返回乙個指向void的資料型別的值,這個值作為後面的exit code

int main(int agrc,char* argv)

pthread_t tidp;

struct member *b;

void* a;

b=(struct member *)malloc(sizeof(struct member));

//先分配記憶體空間撒~

b->num=1;

b->name="mlq";

//字串賦值,其他好用簡便的方法有:   char *p = null;   p = new char [256];

if((pthread_create(&tidp,null,create,(void*)b))==-1)     /

//

void *

為「無型別指標」,void *  可以指向任何型別的資料

printf("create error!\n");

return 1;

if(pthread_join(tidp,&a))                   

//呼叫

pthread_join函式,等待執行緒結束再繼續往下執行,要不然主程序和下面的執行緒並行執行

printf("thread is not exit...\n");

return -2;

printf("thread is exit ,code is %d\n",(int)a);       //不知為啥這裡是(int)a,,a不是指標來的麼

return 0;

多執行緒程式設計之pthread_create函式應用

多執行緒程式設計之執行緒取消

關鍵 pthread cancel函式傳送 終止訊號 pthread setcancelstate函式 設定終止方式 pthread testcancel函式取消執行緒 另一功能是 設定取消點 1 執行緒取消的定義 一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行...

多執行緒程式設計之執行緒的封裝

前人總結出,乙個執行緒安全的class應當滿足的條件 1.從多個執行緒訪問時,其表現出正確的行為,無論作業系統如何排程這些執行緒,無論這些執行緒的執行順序如何交織。2.呼叫端 無需額外的同步或其他協調動作 在寫多執行緒程式時腦子裡要有這樣的意識,下面我總結了幾條比較具體的注意事項。使用多執行緒要考慮...

多執行緒程式設計之執行緒的封裝

前人總結出,乙個執行緒安全的class應當滿足的條件 1.從多個執行緒訪問時,其表現出正確的行為,無論作業系統如何排程這些執行緒,無論這些執行緒的執行順序如何交織。2.呼叫端 無需額外的同步或其他協調動作 在寫多執行緒程式時腦子裡要有這樣的意識,下面我總結了幾條比較具體的注意事項。使用多執行緒要考慮...