深入解析C++编程中线程池的使用

2020-01-06 14:01:59于海丽
  •   sleep(2); 
  •   } 
  •   }; 
  •    
  •   class CYJob:public CJob 
  •   { 
  •   public: 
  •   CYJob(){i=0;} 
  •   ~CYJob(){} 
  •   void Run(void* jobdata) { 
  •   printf("The Job comes from CYJobn"); 
  •   } 
  •   }; 
  •    
  •   main() 
  •   { 
  •   CThreadManage* manage = new CThreadManage(10); 
  •   for(int i=0;i<40;i++) 
  •   { 
  •   CXJob* job = new CXJob(); 
  •   manage->Run(job,NULL); 
  •   } 
  •   sleep(2); 
  •   CYJob* job = new CYJob(); 
  •   manage->Run(job,NULL); 
  •   manage->TerminateAll(); 
  •   }  

    CXJob和CYJob都是从Job类继承而来,其都实现了Run接口。CXJob只是简单的打印一句”The Job comes from CXJob”,CYJob也只打印”The Job comes from CYJob”,然后均休眠2秒钟。在主程序中我们初始创建10个工作线程。然后分别执行40次CXJob和一次CYJob。

    C++ 线程池的封装实现

    为了充分利用多核的优势,我们利用多线程来进行任务处理,但线程也同样不能滥用,会带来一下几个问题:

    1)线程本身存在开销,系统必须为每个线程分配如栈,TLS(线程局部存储),寄存器等。