總結一下linux多執行緒程式設計用到的幾個api函式
一、pthread_create
具體格式:
#include
int pthread_create(pthread_t *—thread,_const pthread_attr_t *attr,void*(*start_rtn)(void*),void *arg);
返回值:若成功則返回0,否則返回出錯編號
新建立的執行緒從start_rtn函式的位址開始執行,該函式只有乙個無指標引數arg,如果需要向start_rtn函式傳遞的引數不止乙個,那麼需要把這些引數放到乙個結構中,然後把這個結構的位址作為arg的引數傳入。建立執行緒後,
原來的主線程繼續執行下乙個**。
例如主線程:
int data=23;
ret=pthread_create(&id,null,(void *)thread,(void *)data);//這個void*一定要有
子執行緒:
void thread(arg)
//arg=23;
如果傳遞多個引數,用結構體。
二、pthread_join
pthread_join使乙個執行緒等待另乙個執行緒結束。
**中如果沒有pthread_join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。
所有執行緒都有乙個執行緒號,也就是thread id。其型別為pthread_t。通過呼叫pthread_self()函式可以獲得自身的執行緒號。
我自己做了測試,下面是源**:
#include
#include
void thread(arg)
int main(void)
for(i=0;i<4;i++)
printf("this is the main process %d /n",i);
pthread_join(id,null);
return 0; }
測試的關鍵是在子執行緒中用sleep(3)函式。注釋掉pthread_join則code1來不急執行;不注釋可以執行。
如果沒有sleep函式,則此區別看不出來。
linux 多執行緒API
執行於乙個程序中的多個執行緒,它們之間使用相同的位址空間,而且執行緒間彼此切換所需的時間遠遠小於程序間切換所需要的時間。據統計,乙個程序的開銷大約是乙個執行緒開銷的30倍左右。同一程序下的執行緒直接共享資料空間。int pthread create pthread t thread,const pt...
Linux多執行緒 執行緒函式
posix執行緒 posix threads 是執行緒的posix標準。該標準定義了建立和操縱執行緒的一整套api。在類unix作業系統 unix linux mac os x等 中,都使用pthreads作為作業系統的執行緒。windows作業系統也有其移植版pthreads win32。執行緒庫...
Linux多執行緒實踐 2 執行緒基本API
與執行緒有關的函式構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 開頭,要使用這些函式庫,要通過引入頭文,而且鏈結這些執行緒函式庫時要使用編譯器命令的 lpthread 選項 ubuntu系列系統需要新增的是 pthread 選項而不是 lpthread 如ubuntu 14.04版...