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

2020-01-06 14:01:59于海丽

该工作主要是无限的从线程池的工作队列中获取任务并执行,如果成功获取任务,则会将线程移进忙碌队列:

 

 
  1. TC_FunctorWrapperInterface *TC_ThreadPool:: get(ThreadWorker *ptw)  { 
  2.   TC_FunctorWrapperInterface *pFunctorWrapper = NULL; 
  3. if(! _jobqueue. pop_front(pFunctorWrapper, 1000))  { 
  4. return NULL;  } 
  5.   { 
  6. Lock sync( _tmutex);  _busthread. insert(ptw); 
  7. }  return pFunctorWrapper; 

执行完,移回工作线程队列:_tpool->idle( this);

 

 
  1. void TC_ThreadPool:: idle(ThreadWorker *ptw)  { 
  2. Lock sync( _tmutex);  _busthread. erase(ptw); 
  3.   //无繁忙线程, 通知等待在线程池结束的线程醒过来 
  4. if( _busthread. empty())  { 
  5. _bAllDone = true;  _tmutex.notifyAll(); 
  6. }  }