執行緒建立pthread

2021-07-27 02:38:23 字數 1180 閱讀 1840

//執行緒建立函式

int pthread_create( pthread_t* restrict tidp      //指向執行緒識別符號的指標

, const pthread_attr_t *restrict_attr      //設定執行緒屬性

, void* (*start_rtn)(void*)                        //執行緒執行函式的起始位址

,void *restrict arg);                 //執行函式的引數

有可能造成記憶體洩漏的原因:

執行緒建立並執行:

pthread_create()函式中使用了int err = allocate stack( iattr , &pd); 為執行緒分配記憶體,並呼叫create_thread( pd , iattr , stack_variables_args);函式正式建立執行緒

在create_thread()函式中執行start_thread

start_thread()函式中使用thread——setmem( pd , result , pd->start_routine(pd->arg) ); 啟動執行緒並等待執行緒完成 ,

if(is_detached(pd)) __free_tcb(pd); 如果執行緒pd為為datached執行緒,則釋放tcb所佔資源(detached執行緒可以通過attr引數設定)

執行緒detach:

pthread_detach(thread)函式在最後進行了__free_tcb(pd)釋放tcb占用記憶體

執行緒等待:pthread_join():

最後呼叫__free_tcb(pd)釋放tcb占用資源

所以,如果create執行緒並未設定detach屬性(執行緒記憶體不能被thread_join()等待,且執行緒資源結束後釋放),有並未對執行緒結束做任何操作,則會造成記憶體洩漏

解決方法:

1.建立detached執行緒

void run()  

int main()

2.執行緒結束前進行detached設定

void run()  

int main()

3.主線程使用pthread_join()函式

void run()  

int main()

pthread建立多執行緒

include include include include include include include include include include include tinyxml tinyxml.h include include include include define macxm...

pthread多執行緒的建立

多執行緒的建立 include include include include include include include include struct number void create void arg int main int argc,char argv sleep 2 return ...

pthread 使用者態建立執行緒

thread.c include include 執行緒一 void thread 1 void pthread exit 0 執行緒二 void thread 2 void pthread exit 0 int main void 建立執行緒二 ret pthread create id 2,nu...