Linux下建立執行緒池

2021-07-31 21:51:41 字數 1816 閱讀 5291

//執行緒入口函式

void* function_entry(void *arg)

//2.程序退出

if (pool->flag!=0)

//3.建立工作

printf("the pthread will to work ox%x\n",pthread_self());

//判斷是否滿足條件

assert(pool->work_num!=0);

assert(pool->work_list!=null);

//取出鍊錶元素

pool->work_num--;

work_struct *work = pool->work_list;

pool->work_list = work->next;

pthread_mutex_unlock(&(pool->queue_lock));

//執行函式

(*(work->function))(work->arg);

free(work);

work = null;

}}void creat_pthreadpool(int num)

}void join_work(void *(*function)(void *arg),void *arg)

tmpwork->next = new_work;

}else

pool->work_num++;

assert(pool->work_num!=0);

assert(pool->work_list != null);

pthread_mutex_unlock(&(pool->queue_lock));

//喚醒等待中的執行緒

pthread_cond_signal(&(pool->queue_ready));

}void close_pool()

free(pool->pthreadid);

//銷毀佇列

work_struct *head = null;

while (pool->work_list!=null)

//銷毀互斥鎖和條件變數

pthread_mutex_destroy(&(pool->queue_lock));

pthread_cond_destroy(&(pool->queue_ready));

free(pool);//由malloc建立

//置空指標

pool = null;

}void print_t(int i)

void main()

sleep(5);

//3.關閉執行緒池

close_pool();

}程式執行結果圖:

參考部落格:

執行緒池建立

executors執行緒池建立,主要包含以下幾種方式 1 第一種 測試 提交15個執行時間需要3秒的任務,看執行緒池的狀況 param threadpoolexecutor 傳入不同的執行緒池,看不同的結果 throws exception public void testcommon thread...

執行緒池 Executors類建立執行緒池

executors靜態工廠建立幾種常用執行緒池 1.建立了乙個固定執行緒數量的執行緒池,可以控制線程最大併發數,超出的執行緒會在佇列中等待。newfixedthreadpool int nthreads 執行緒池中線程數量是要指定傳入的,注意在固定大小的執行緒池中使用的阻塞佇列是linkedbloc...

執行緒池建立方式及執行緒池原理

執行緒池提交任務時的執行順序如下 向執行緒池提交任務時,會首先判斷執行緒池中的執行緒數是否大於設定的核心執行緒數,如果不大於,就建立乙個核心執行緒來執行任務。如果大於核心執行緒數,就會判斷緩衝佇列是否滿了,如果沒有滿,則放入佇列,等待執行緒空閒時執行任務。如果佇列已經滿了,則判斷是否達到了執行緒池設...