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: