第二部分是關於執行緒池主要兩個操作: 1.提交乙個任務
2.獲取已提交任務的結果
提交任務函式----傳入乙個函式指標,乙個引數void* ,以及是否需要查詢返回值,如果不需要返回值效率會高些,如果選擇要查詢結果,但是任務完成後沒有獲取結果的話,會一直占用空間
如果是不需要返回值返回1,否則返回key,失敗返回0
根據key值查詢任務,如果存在任務,返回任務狀態,否則返回nosochwock,就是前篇列舉的值,當任務結果是完成時,銷毀此結果
1int threadpool::pushtask(void *(*task)(void *),void *argc,bool
ifneedret=false)211
else
1415
16 taskqlock.lock(); //
放入任務
17if (taskq->push(work))
20else
2425
if (ifneedret == true) ;
2930 rettreelock.lock();//
以寫方式獨佔
31 rettree.insert(std::pair(work.key, tmp));
32 rettreelock.unlock(); //
寫鎖釋放33}
34 taskcondvar.notify_one(); //
喚醒乙個執行緒去做任務,如果沒阻塞的執行緒無效果
3536
return work.key==0?1:work.key; //
有返回返回key,無返回返回1代表成功37}
3839 ret_t threadpool::getresult(int key)
48else
52rettreelock.unlock();
5354
return
ret;
55 }
向執行緒池提交任務
1 threadpoolexetor submit callabletask 有返回值 public class sumit1 executorservice executor executors.newsinglethreadexecutor future future executor.subm...
執行緒池提交任務和執行任務原始碼解析(2)
因為篇幅太長所以分兩篇部落格進行說明,本文算是對 執行緒池提交任務和執行任務原始碼解析 的補充 第一篇部落格 執行緒池提交任務和執行任務原始碼解析 繼續execute 方法的說明 public void execute runnable command 執行緒池提交任務和執行任務原始碼解析 分析到這...
執行緒池概念,任務
問題 執行緒是寶貴的記憶體資源,單個執行緒約佔1mb空間,過多分配易造成記憶體溢位 頻繁的建立及銷毀執行緒會增加虛擬機器 頻率 資源開銷,造成程式效能下降 執行緒池 執行緒容器,可設定執行緒分配的數量上限 將預先建立的執行緒物件存入池中,並重用執行緒池中的執行緒物件 避免頻繁的建立和銷毀 將任務提交...