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: