linux執行緒池學習(一)

2021-07-29 14:39:29 字數 2216 閱讀 7971

關於標頭檔案pthread.h內主要函式及引數學習:

1.pthread_create函式

函式宣告:

int pthread_create(pthread_t *restrict_tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict_arg);
引數說明:

第乙個引數restrict_tidp是指執行緒成功建立時的執行緒id

第二個引數是指建立執行緒的屬性

第三個引數是指執行緒呼叫的執行函式

第四個引數是指呼叫的函式傳遞的引數

若成功則返回0,否則返回出錯編號。返回成功時,由tidp指向的記憶體單元被設定為新建立執行緒的執行緒id。attr引數用於指定各種不同的執行緒屬性。新建立的執行緒從start_rtn函式的位址開始執行,該函式只有乙個萬能指標引數arg,如果需要向start_rtn函式傳遞的引數不止乙個,那麼需要把這些引數放到乙個結構中,然後把這個結構的位址作為arg的引數傳入。

2.pthread_mutex_init鎖的呼叫

函式宣告:

int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
pthread_mutex_init()函式是以動態方式建立互斥鎖的,引數attr指定了新建互斥鎖的屬性。如果引數attr為空,則使用預設的互斥鎖屬性,預設屬性為快速互斥鎖 。pthread_mutexattr_init()函式成功完成之後會返回零,其他任何返回值都表示出現了錯誤。

3.pthread_join函式

函式宣告:

int pthread_join(pthread_t thread, void **retval);
引數 :

thread: 執行緒識別符號,即執行緒id,標識唯一執行緒。[執行緒建立時候生成,即pthread_create(pthread_t *register_tidp,…)中的registered_tidp]

retval: 使用者定義的指標,用來儲存被等待執行緒的返回值。

返回值 :

0代表成功。 失敗,返回的則是錯誤號

pthread_join():使乙個執行緒等待另乙個執行緒結束。

**中如果沒有pthread_join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。

1,2,3綜合舉例使用:

**原鏈結

#include 

#include

#include

void *function(void *arg);

pthread_mutex_t mutex;

int counter = 0;

int main(int argc, char *argv)

if(rc2=pthread_create(&thread2,null,function,str2))

pthread_join(thread1,null);

pthread_join(thread2,null);

return0;}

void *function(void *arg)

printf("\n");

pthread_mutex_unlock(&mutex);

}

增加:關於執行緒呼叫函式有多個引數時的情況

把要傳遞的引數結合成結構體形式

typedef

struct people;

void *fun1(void *arg)

int main()

pool->threads=malloc(sizeof(pthread_t)*thread_num)
不是說malloc是void*型別嗎?而threads在結構體中的宣告是thread_t *threads,是unsigned long int 型,不太理解為什麼malloc動態分配的值不經過強制型別轉換就能賦值給pool->threads還不報錯呢?

Linux執行緒池

linux下通用執行緒池的建立與使用 本文給出了乙個通用的執行緒池框架,該框架將與執行緒執行相關的任務進行了高層次的抽象,使之與具體的執行任務無關。另外該執行緒池具有動態伸縮性,它能根據執行任務的輕重自動調整執行緒池中線程的數量。文章的最後,我們給出乙個簡單示例程式,通過該示例程式,我們會發現,通過...

Linux 執行緒池

一.功能 執行緒池中有若干個執行緒,用於執行大量相對短暫的任務 二.功能描述 計算密集型任務 執行緒池中線程個數 cpu個數 i o密集型任務 執行緒池中線程個數 cpu個數 當任務增加時,可以動態增加執行緒池中線程個數,當任務執行完成後,可以動態減少執行緒池中線程個數 運用生產消費者模型,生產者執...

Linux 執行緒池

首先,執行緒池是什麼?顧名思義,就是把一堆開闢好的執行緒放在乙個池子裡統一管理,就是乙個執行緒池。其次,為什麼要用執行緒池,難道來乙個請求給它申請乙個執行緒,請求處理完了釋放執行緒不行麼?也行,但是如果建立執行緒和銷毀執行緒的時間比執行緒處理請求的時間長,而且請求很多的情況下,我們的cpu資源都浪費...