1: 
   2: 
   3: /*************
   4: *            *
   5: *  SENTINEL  *
   6: *            *
   7: *************/
   8: 
   9: 
  10: #ifndef WWWI_MIND_DTHREADPOOL_H 
  11: #define WWWI_MIND_DTHREADPOOL_H 
  12: 
  13: 
  14: /**********************
  15: *                     *
  16: *  COMPILER INCLUDES  *
  17: *                     *
  18: **********************/
  19: 
  20: 
  21: #include <pair.h> 
  22: 
  23: 
  24: /*********************
  25: *                    *
  26: *  PROJECT INCLUDES  *
  27: *                    *
  28: *********************/
  29: 
  30: 
  31: #include "wwwi/rwlock.h" 
  32: #include "wwwi/semaphore.h" 
  33: 
  34: 
  35: using WWWI::RWLock;
  36: using WWWI::Semaphore;
  37: 
  38: 
  39: /**********************
  40: *                     *
  41: *  CLASS DTHREADPOOL  *
  42: *                     *
  43: **********************/
  44: 
  45: 
  46: template <class Worker, class Initializer> class DynamicThreadPool {
  47: public:
  48:         DynamicThreadPool(unsigned i_uMinIdle, unsigned i_uMaxIdle, Initializer i_in);
  49:   void  NewThread(void);
  50:   void  PleaseShutdown(void);
  51:   int   Thread(void);
  52:        ~DynamicThreadPool(void);
  53: 
  54: protected:
  55:   volatile bool  m_bShuttingDown;
  56:   unsigned       m_uMinIdle;
  57:   unsigned       m_uMaxIdle; 
  58:   Mutex          m_mxNew;
  59:   RWLock         m_rwThreads;
  60:   Semaphore      m_seWaiting;
  61:   Initializer    m_in;
  62:   unsigned       m_uThreads;
  63: };
  64: 
  65: 
  66: /*********************
  67: *                    *
  68: *  INLINE FUNCTIONS  *
  69: *                    *
  70: *********************/
  71: 
  72: 
  73: #include "dthreadpool.i" 
  74: 
  75: 
  76: /************
  77: *           *
  78: *  THE END  *
  79: *           *
  80: ************/
  81: 
  82: 
  83: #endif 
  84: 
  85: 
  86: