//執行緒入口函式
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...
執行緒池建立方式及執行緒池原理
執行緒池提交任務時的執行順序如下 向執行緒池提交任務時,會首先判斷執行緒池中的執行緒數是否大於設定的核心執行緒數,如果不大於,就建立乙個核心執行緒來執行任務。如果大於核心執行緒數,就會判斷緩衝佇列是否滿了,如果沒有滿,則放入佇列,等待執行緒空閒時執行任務。如果佇列已經滿了,則判斷是否達到了執行緒池設...