乙個簡單執行緒池的實現 需進一步完善

2022-09-17 13:00:17 字數 1294 閱讀 1534

1.定義乙個任務結構體,和乙個執行緒池結構體

struct task;

struct pthread_pool;

2.新增任務----》初始化任務鍊錶,新增節點

pool_add_task(void*(*pro)(void *),void *arg)

//?????前面幾句如果改成lastnode = new;出現段錯誤。原因:任務鍊錶是struct pthread_pool的乙個成員,而pool->head是任務鍊錶的頭。struct task *lastnode = pool->head;

else

lastnode->next = new;

}pool->cur_queue_size++;//每新增乙個結點,標記位+1

// printf("%d\n",*(int *)(new->arg));

// printf("%d\n",pool->cur_queue_size);

pthread_mutex_unlock(&(pool->mutex));

pthread_cond_signal(&pool->cond);//向處於阻塞狀態的執行緒傳送喚醒訊號

}3.執行緒初始化----》建立執行緒(功能函式)

void pool_init(int thread_num)

}4.任務函式(從任務鍊錶的頭部扣下結點,執行結構體中的函式)

void* thread_r(void*p)

}5.功能函式中的函式指標。

void *f1(void *arg)

int a = *(int*)arg;

// sleep(1);

printf("%d\n",a);

main函式:(如何銷毀執行緒池,需待解)

int main()

{pool_init(3);

// printf("pthread pool is start\n");

// sleep(1);

int a=12;

pool_add_task(f1,(void*)&a);

// sleep(2);

// printf("pool_add_task\n");

pool_add_task(f1,(void*)&a);

pool_add_task(f1,(void*)&a);

// sleep(5);

pthread_join(pool->tids[0],null);

pthread_join(pool->tids[1],null);

pthread_join(pool->tids[2],null);

乙個簡單執行緒池的實現 C語言

本文的 實現了乙個簡單的執行緒池,並利用c s模型將客戶端所傳送的資料進行簡單的計算。我是這麼理解的,池是電腦科學中一種典型的機制,如stl裡面的記憶體池,資料庫連線池,還有程序池或執行緒池。這些池建立的目的都是為了避免頻繁系統呼叫所帶來的開銷。我們這樣想,如果我們事先轉備好一大塊所需要的記憶體,或...

乙個簡單執行緒類的實現

很多時候,在c 類中,我們需要建立乙個輔助線程,用來處理後台的資料,每當敲起 來的時候卻發現有很多顧慮,執行緒過程函式必須為全域性或者靜態函式,而在靜態函式類部又不能呼叫本類的非靜態成員函式,總感覺每一步得小心謹慎,像黑夜的時候光腳趕路一樣,想走快卻又怕被石子絆住。下面實現乙個簡單執行緒類,方便呼叫...

一步一步實現乙個簡單的OS HelloWorld

先弄個helloworld吧,雖然這個網上一大堆,不過不知道的人還是不少,就簡單的弄乙個吧。系統啟動時,第一步是bios自檢 這個不管 然後從cmos中設定的預設引導介質中載入第乙個扇區 512位元組 到記憶體的0x07c00處 0x0000 0x7c00 之後,跳轉執行。所以,引導啟動系統的第一部...