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

2020-01-06 14:01:59于海丽
  •   return false; 
  • }   
  • _tmutex.timedWait(millsecond)方法唤醒。反复判断是否所有的工作是否完成:   
  • bool TC_ThreadPool:: finish()  { 
  • return _startqueue. empty() && _jobqueue .empty() && _busthread. empty() && _bAllDone;  } 

    整体cpp实现如下:

     

     
    1. TC_ThreadPool ::KeyInitialize TC_ThreadPool::g_key_initialize;  pthread_key_t TC_ThreadPool::g_key ; 
    2.   void TC_ThreadPool::destructor( void *p) 
    3. {  ThreadData *ttd = ( ThreadData*)p; 
    4. if(ttd)  { 
    5. delete ttd;  } 
    6. }   
    7. void TC_ThreadPool::exit()  { 
    8. TC_ThreadPool:: ThreadData *p = getThreadData();  if(p) 
    9. {  delete p; 
    10. int ret = pthread_setspecific( g_key, NULL );  if(ret != 0) 
    11. {  throw TC_ThreadPool_Exception ("[TC_ThreadPool::setThreadData] pthread_setspecific error", ret); 
    12. }  } 
    13.   _jobqueue. clear(); 
    14. }   
    15. void TC_ThreadPool::setThreadData( TC_ThreadPool:: ThreadData *p)  { 
    16. TC_ThreadPool:: ThreadData *pOld = getThreadData();  if(pOld != NULL && pOld != p) 
    17. {  delete pOld;